如何处理基于HTTP头的身份验证超出带外的Web应用程序中的AJAX行为?

时间:2014-07-07 17:37:16

标签: jquery ajax authentication timeout session-timeout

我在ASP.NET MVC / Web API应用程序之上安装了一个带有RSA Cleartrust的客户端。

Cleartrust通过HTTP标头提供有关经过身份验证的用户的信息。当受保护的URL没有有效的,未过期的Cleartrust cookie时,用户将被重定向到另一台服务器上的Cleartrust登录,然后返回受保护的应用程序。

该应用程序使用大量JavaScript来进行异步调用。当用户的会话超时使用Cleartrust时,使用受保护应用程序制作的jQuery的后续AJAX调用会导致错误,但不会导致浏览器页面加载级别的常见重定向行为。

没有会话超时的推送通知,因此没有被动方法可以避免这些错误。

  1. 在登录时设置一个cookie(可能由于不同的入口点而很难)在30分钟后到期。用它作为旗帜;当它到期时,重新加载页面并强制用户进行Cleartrust登录,然后将其返回到受保护应用程序中的同一页面。然后我再次猜测这个cookie可以在每个页面加载上设置,创建滑动过期。检查cookie,然后重置cookie。这适用于所有入口点。

  2. 使用每35分钟检查一次有效会话的JavaScript计时器。 (不到30分钟只会更新现有会话。)如果会话已过期,请强制重新加载页面,这会将用户提供给Cleartrust登录页面。然后将它们重定向回受保护应用程序中的相同页面。

  3. 在jQuery成功代码块中添加一些错误处理逻辑,正确解释重定向到登录页面,并避免出现JSON解析错误。当此逻辑找到重定向时,再次强制页面重新加载,然后登录Cleartrust并重定向回受保护应用程序中的同一页面。

  4. 显然#1&在没有重新配置的30分钟超时期间,#2很脆弱。

    1)我认为这是最简单的选择。

    3)我认为这是最好的选择,但肯定不是最容易的。我不能在我的环境中精确地重建这种状态,只是试图模仿它,所以我很难彻底测试。

1 个答案:

答案 0 :(得分:0)

http://api.jquery.com/jquery.ajax/上记录的

statusCode将完美地满足我的目的。用户在会话过期时会收到302重定向。我可以可靠地对那个302采取行动。