0

我正在开发一个使用 Windows Identity Foundation 保护的 MVC4 应用程序。

我还使用 jQuery ( $.ajax() ) 定期刷新一些部分视图。

此应用程序用于监视某些系统,除了部分视图刷新之外不会发生任何导航。

20 分钟后,WIF 安全 cookie 过期,我的应用程序尝试从 PassiveSTS 页面请求另一个令牌。正如预期的那样,PassiveSTS 执行身份验证并重定向到调用 URL。

问题是用于加载局部视图的 ajax() 请求需要一个 HTTP 200 代码,而是接收 HTTP 302。

在我看来,被动身份验证并非旨在与对部分视图的 ajax 调用一起正常工作。

这种方法有什么问题?主动身份验证是否更合适?

4

1 回答 1

1

如果调用者未经授权,Ajax 调用应该发出 401。问题是 WIF 假定请求是浏览器并进行重定向。我为 Thinktecture IdentityModel 中的 Ajax 调用构建了一个助手来抑制这些重定向。您可以使用 NuGet 中的库,也可以直接获取相关代码并将其添加到您的项目中。

http://brockallen.com/2013/02/19/suppress-login-redirects-for-api-clients-in-wif-with-thinktecture-identitymodel/

https://github.com/thinktecture/Thinktecture.IdentityModel.45/

当然,您的客户端 JS 在收到 401 时将不得不做一些事情,但大概您会通知用户您需要重新登录。

另一件事可能是使用滑动会话,这是我添加到 IdentityModel 的另一个功能:

http://brockallen.com/2013/02/17/sliding-sessions-in-wif-with-the-session-authentication-module-sam-and-thinktecture-identitymodel/

于 2013-08-27T14:04:39.307 回答