【发布时间】:2015-04-29 09:48:49
【问题描述】:
一些背景
我正在开发一个使用 WIF 实现联合身份验证的 ASP.NET MVC Web 应用程序。
由于我无法控制的原因,我不得不使用代理 STS,它一方面充当我的 MVC 应用程序的 IdP,但同时它通过 ADFS 服务器实现自己的联合身份验证。
这样,MVC 应用程序中的用户认证过程如下所示:
- 用户进入 MVC 应用程序。
- 应用程序将用户重定向到代理 STS 进行身份验证。
- 代理 STS 将用户重定向到 ADFS 服务器进行身份验证。
- ADFS 服务器对用户进行身份验证并重定向回代理 STS。
- 代理 STS 使用 ADFS 服务器发布的相同身份验证信息将用户重定向回应用程序。
ADFS 服务器不是我可以直接访问的东西(就管理而言),而代理 STS 只是我完全控制的一个小服务(使用 this 教程实现)。
问题(以及我试图解决的问题)
使用上述设置,我注意到用户的身份验证在大约一个小时后消失,然后他们需要重新进行身份验证,所以现在我正在寻找一种延长身份验证生命周期的方法。
据我了解,延长代理 STS 颁发的安全令牌的生命周期应该足够了,我这样做了。但这并没有解决问题——用户仍然需要经常重新认证。
所以我尝试做以下事情希望它会有所帮助:
- 在 MVC 应用程序的 ws-federation 配置中将 persistentCookiesOnPassiveRedirects 选项设置为 true,有效期为 1 周(以确保身份验证 cookie 不会因会话到期而丢失)。
- 将 MVC 应用中的 HTTP 会话生命周期设置为持续一周(以确保安全令牌不会因会话到期而在服务器端丢失)。
- 将代理 STS 颁发的令牌的安全令牌生命周期设置为 1 周(我通过检查 MVC 应用接收到的安全令牌确保正在应用该令牌)。
- 在代理 STS 上也执行第 1 条和第 2 条中所述的操作。
- 将 MVC 应用程序池的 IIS 自动应用程序池回收时间设置为每周一次。
上述方法似乎都没有解决问题,但后来我尝试了:
- 将 ADFS 服务器 颁发的令牌的安全令牌有效期设置为 8 小时。
因此,身份验证持续时间变得更长,甚至长达 10-11 小时。
问题
在上述场景中,是什么控制了 WS-Federation 的身份验证持续时间?
我尝试的上述哪些事情应该与我的问题真正相关,哪些根本不应该影响它(具体来说,我想了解 ADFS 令牌生命周期是否真的应该有任何影响,如果是这样 - 为什么,或者我只是在测试中运气不佳,而这真的是其他可能有助于解决这个问题的东西吗)?
提前致谢!
【问题讨论】:
标签: asp.net authentication wif adfs ws-federation