我们目前正在开发一个使用 ADFS 2.0 的 SSO 项目。作为 IDP/CP 信托。应用程序设计的基本要求之一是在空闲期(可以是任何东西)后重新验证用户。经过广泛搜索后,我发现只有少数实现(除了 SharePoint 示例)涉及WebSSOlifetime 和 TokenLifeTimeADFS 服务器中的设置。我了解 WebSSOLifeTime 是服务器范围的设置(默认值:480),而 TokenLifeTime 是令牌到期的 RP 级别设置(默认值 0 - 10 小时)。为了随机测试设置,我将 RP 应用程序的 WebSSOlifetime 值更改为 5 分钟,将 TokenLifeTime 值更改为 3 分钟。但它在 5 分钟的空闲时间(如 WebSSOlifetime 中设置)后没有触发重新身份验证。我测试的 RP 应用程序包括 - Google 应用程序 - ADFS 集成 SSO 和用于测试声明值的单页应用程序。如果有人可以发布任何指向 ADFS 2.0 会话维护功能的相关指针,那就太好了。
1 回答
经过一番汗水,我找到了解决方案。Stackoverflow 中的这篇文章确实为我提供了一个起点(非常感谢!)。控制 IP/STS 登录提示的关键参数是新鲜度值(这是Oasis 文档中提到的可选参数)。
当包含在 web.config 的 federatedAuthentication 部分中时,此参数(设置为 freshness="0")将提示 IDP 根据 WCT 参数中的当前时间检查令牌的新鲜度值。之后我发现(经过大量测试)通过 shell 脚本设置的 TokenLifeTime进入画面。这 (TokenLifeTime) 控制用户在将他重定向到登录屏幕之前可以处于活动状态的时间。
正如您在请求 URL 中看到的:
https://XXX/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2fXXX%2fXXX&wfresh=0&wctx=rm%3d0%26id%3dpassive%26ru%3d%252fXXX%252fDefault.aspx&wct=2013-02-14T01%3a36%3a17Z
wfresh和wctx值被传递给 IDP 进行验证。
我仍然不确定一切(新鲜度、TokenLifetime 和 WebSSOLifetime)是如何在幕后同步的。关于背景的一个很好的解释会非常有帮助(当然会增加一些声誉:))。