我有一个客户端RSA Cleartrust在一个ASP之上。. NET MVC/Web API应用。
Cleartrust通过HTTP头提供认证用户的信息。当一个受保护的URL没有有效的、未过期的Cleartrust cookie时,用户将被重定向到另一个服务器上的Cleartrust登录,然后返回到受保护的应用程序。
应用程序使用大量JavaScript进行异步调用。当用户的Cleartrust会话超时时,使用jQuery从受保护的应用程序进行的后续AJAX调用会导致错误,但不会在浏览器页面加载级别看到通常的重定向行为。
没有会话超时的推送通知,所以没有被动的方法来避免这些错误。
在登录时设置一个30分钟过期的cookie(可能由于入口点不同而很难)。把它当作旗帜;当它过期时,重新加载页面并强制用户登录Cleartrust,然后将他们送回受保护应用程序中的同一页面。然后,我想这个cookie可以在每次页面加载时设置,创建滑动过期。检查cookie,然后重置cookie。
使用JavaScript计时器,每35分钟检查一次有效会话。(不到30分钟就可以更新现有的会话。)如果会话已经过期,强制页面重新加载,这将用户传送到Cleartrust登录页面。然后,它们会被重定向到受保护应用中所处的同一页面。
在jQuery成功代码块中添加一些错误处理逻辑,以正确解释重定向到登录页面,并避免JSON解析错误。当这个逻辑发现一个重定向时,再次强制重新加载页面,然后登录Cleartrust并重定向回受保护的应用程序中的同一页面。
显然#1 在没有重新配置的30分钟超时周围是脆弱的。
我认为这是最简单的选择。
我认为这是最好的选择,但肯定不是最容易的。我不能在我的环境中精确地重建这种状态,只能尝试模拟它,所以我很难进行彻底的测试。http://api.jquery.com/jquery.ajax/上记录的statusCode将完全满足我的目的。当用户的会话过期时,用户会收到302重定向。