ajax - 如何优雅地处理 Ajax 调用的登录过期?

标签 ajax rest authentication login jwt

我的 Web 应用程序由大量对服务器端的 Ajax 调用组成 RESTful APIs .每次客户登录我的网站,登录页面都会得到一个JWT (JSON Web token )来自服务器的 token 并将其存储为 cookie在客户端。 (我选择将它存储为 cookie,因为这是让浏览器自动发送它的唯一方法,据说它比 HTML5 Web Storage 更安全)。 token 中有一个字段描述 token 的到期日期。对于每个 Ajax 调用,都会发送 token 以进行身份​​验证。

如果客户长时间停留在我的页面上, token 可能会过期。当客户端发出下一个 HTTP 请求(不仅仅是 REST 调用)时,服务器会检测到它。我用的是 servlet filter拦截all HTTP 请求并检查 token 是否过期。如果 token 过期,则 重定向到登录页面 将发送响应。

但是上述方法存在一个问题:“如何在客户端优雅地处理 重定向到登录页面 响应?”

  • 对于 non-Ajax发起的HTTP请求,我可以依靠浏览器来处理重定向到登录页面的响应并使页面自动跳转。
  • 对于 Ajax发起的 HTTP 请求,看来我需要向 each 添加额外的逻辑ajax 调用的 completion handler检测重定向到登录页面的响应和 imperatively使页面跳转。

  • 还是我完全走错了路?

    一些引用:

    JWT (JSON Web Token) automatic prolongation of expiration

    Which authentication strategy should I use for my API?

    Implicit & Explicit authentication

    添加 1:

    浏览器似乎会透明地处理 302 重定向。 所以也许我可以将 302 重定向返回到登录页面,无论是用于 ajax 调用还是普通页面访问。 我稍后会尝试并回复。

    来自 here :

    If the response is an HTTP redirect (status code 301, 302, 303 or 307), then it MUST be transparently followed (unless it violates security or infinite loop precautions). Any other error (including a 401) MUST cause the object to use that error page as the response.



    Catching 302 FOUND in JavaScript

    How to manage a redirect request after a jQuery Ajax call

    最佳答案

    正是出于这个原因,Web API 不应响应 302 redirect ,但与 401 unauthorized当 token 过期时。

    Web 应用程序应该返回 302响应,因为它们总是要被像代理这样的浏览器使用。如需更多信息,另见 my answer here .

    关于ajax - 如何优雅地处理 Ajax 调用的登录过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325823/

    相关文章:

    python - Django:多账户,每个账户下有多个用户,但是账户特定的数据

    javascript - chrome中ajax同步调用显示加载的方式是什么

    api - 如何使用 grails 构建数据库抽象层/API/中间件项目,我的看法是否可行?

    rest - 范围 API 的机制

    rest - 从 rest api 调用 puppeteer

    ruby-on-rails - rails 3.2 中的 f.hidden_​​field

    javascript - 保护密码客户端 Firebase

    jquery - 如何防止 jquery Ajax 调用滚动带有输入到浏览器窗口顶部的表单

    html - WordPress加载更多帖子而ajax不起作用

    jquery - 玩框架,jquery ajax调用冲突