码农家园

关闭
导航

关于rest:如何优雅地处理Ajax调用的登录过期?


ajaxauthenticationjwtloginrest

How to gracefully handle login expiration for an Ajax call?

我的Web应用程序由许多对服务器端RESTful APIs的Ajax调用组成。每次客户登录我的网站时,登录页面都会从服务器上获取一个EDOCX1(json web token)令牌,并将其存储为客户端的cookie。(我选择将其存储为cookie,因为这是让浏览器自动发送它的唯一方法,据说它比HTML5 Web存储更安全)。令牌中有一个字段描述令牌的到期日期。对于每个Ajax调用,都会发送令牌进行身份验证。

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

但是上面的方法有一个问题:"如何优雅地处理重定向到客户机端的登录页面响应?"

  • 对于由non-Ajax发起的HTTP请求,我可以依靠浏览器来处理对登录页面响应的重定向,并使页面自动跳转。

  • 对于由Ajax发起的HTTP请求,我似乎需要在eachajax调用的completion handler中添加额外的逻辑,以检测对登录页面响应的重定向,imperatively使页面跳转。

还是我完全走错了路?

参考文献:

JWT(JSON Web令牌)自动延长到期时间

我应该为我的API使用哪种身份验证策略?

隐式和显式身份验证

添加1:

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

从这里:

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.

捕获在javascript中找到的302

如何在jquery ajax调用后管理重定向请求


正因为这个原因,Web API不应该使用302 redirect进行响应,而是在令牌过期时使用401 unauthorized进行响应。

Web应用程序应该返回302响应,因为它们总是被类似浏览器的代理所使用。有关更多信息,请参阅此处的我的答案。

相关讨论

  • 嗯,我直到现在才知道。后面似乎还有一个HTTP convention。多谢!
  • 顺便说一句,这并不是说Web API永远不应该返回302响应。如果资源实际移动了,返回301或302是完全可以的。但它不应该用于实现Web API IMO的身份验证机制。
  • 对。形式跟随功能。


是的,我认为你是对的。

对于非Ajax,可以在服务端使用重定向处理它。

对于Ajax,可以根据Ajax结果切换页面。


302重定向不适用于javascript(ajax)调用,它只从javascript内部调用新页面,而不是实际的浏览器。

整洁的解决方案是返回带有错误消息的JSON对象,并显示该错误消息。或者使用javascript将位置更改为登录页面


通常,可以使用全局Ajax事件处理程序来处理会话过期。

尝试捕获.ajaxError(),然后检查它的会话是否过期或其他什么情况,并相应地进行操作。

老实说,我没试过,但值得一试。


  • 关于javascript:如何在jquery ajax调用后管理重定向请求
  • 关于node.js:JWT(JSON Web Token)自动延长到期时间
  • 关于jquery:在JavaScript中捕获302 FOUND
  • 关于jquery:在AJAX调用中,未遵循302
  • 我应该为我的API使用哪种身份验证策略?
  • 如何使jQuery在返回之前等待Ajax调用完成?
  • 关于休息:会话真的违反了RESTfulness吗?
  • 关于javascript:如何在没有jQuery的情况下进行AJAX调用?
  • 关于javascript:如何从异步调用返回响应?
  • 关于javascript:无法在ajax中处理302重定向,为什么?
  • 关于javascript:从ajax帖子处理文件下载
  • 关于安全性:在浏览器中存储JWT的位置? 如何防范CSRF?
  • 使用JWT进行跨域身份验证的单点登录流程

Copyright ©  码农家园 联系:[email protected]