【问题标题】:Authentication lifetime with WS-Federation via ADFS and WIF通过 ADFS 和 WIF 使用 WS-Federation 的身份验证生命周期
【发布时间】:2015-04-29 09:48:49
【问题描述】:

一些背景

我正在开发一个使用 WIF 实现联合身份验证的 ASP.NET MVC Web 应用程序。
由于我无法控制的原因,我不得不使用代理 STS,它一方面充当我的 MVC 应用程序的 IdP,但同时它通过 ADFS 服务器实现自己的联合身份验证。
这样,MVC 应用程序中的用户认证过程如下所示:

  1. 用户进入 MVC 应用程序。
  2. 应用程序将用户重定向到代理 STS 进行身份验证。
  3. 代理 STS 将用户重定向到 ADFS 服务器进行身份验证。
  4. ADFS 服务器对用户进行身份验证并重定向回代理 STS。
  5. 代理 STS 使用 ADFS 服务器发布的相同身份验证信息将用户重定向回应用程序。

ADFS 服务器不是我可以直接访问的东西(就管理而言),而代理 STS 只是我完全控制的一个小服务(使用 this 教程实现)。


问题(以及我试图解决的问题)

使用上述设置,我注意到用户的身份验证在大约一个小时后消失,然后他们需要重新进行身份验证,所以现在我正在寻找一种延长身份验证生命周期的方法。
据我了解,延长代理 STS 颁发的安全令牌的生命周期应该足够了,我这样做了。但这并没有解决问题——用户仍然需要经常重新认证。
所以我尝试做以下事情希望它会有所帮助:

  1. 在 MVC 应用程序的 ws-federation 配置中将 persistentCookiesOnPassiveRedirects 选项设置为 true,有效期为 1 周(以确保身份验证 cookie 不会因会话到期而丢失)。
  2. 将 MVC 应用中的 HTTP 会话生命周期设置为持续一周(以确保安全令牌不会因会话到期而在服务器端丢失)。
  3. 将代理 STS 颁发的令牌的安全令牌生命周期设置为 1 周(我通过检查 MVC 应用接收到的安全令牌确保正在应用该令牌)。
  4. 在代理 STS 上也执行第 1 条和第 2 条中所述的操作。
  5. 将 MVC 应用程序池的 IIS 自动应用程序池回收时间设置为每周一次。

上述方法似乎都没有解决问题,但后来我尝试了:

  1. ADFS 服务器 颁发的令牌的安全令牌有效期设置为 8 小时。

因此,身份验证持续时间变得更长,甚至长达 10-11 小时。


问题

在上述场景中,是什么控制了 WS-Federation 的身份验证持续时间?
我尝试的上述哪些事情应该与我的问题真正相关,哪些根本不应该影响它(具体来说,我想了解 ADFS 令牌生命周期是否真的应该有任何影响,如果是这样 - 为什么,或者我只是在测试中运气不佳,而这真的是其他可能有助于解决这个问题的东西吗)?

提前致谢!

【问题讨论】:

标签: asp.net authentication wif adfs ws-federation


【解决方案1】:

您已经达到了很多相关参数。我将只讨论 WIF/.NET 部分和 SAML 令牌。不是关于池回收等。它们是不同的主题。如果您真的想控制它,您必须查看 SAML 消息和令牌中的 XML。

其中一个问题是 SAML1 和 SAML2 令牌之间存在差异。此外,SAML 协议中有一些有效性时间戳,WIF 和 IdP 之间不使用该协议。

总结:
WIF 似乎使用了 SessionToken 的条件。这是 SAML 1.1 中唯一可用的东西。好的。
SecurityTokenHandler.ValidateToken(token) 调用 DetectReplayedTokens()。 SecurityTokenHandler.DetectReplayedTokens(SecurityToken) 方法验证传入 Token (SubjectConfirmationData @NotOnOrAfter) 是否有效。 SAML 1.1 中不存在 WIF 使用条件@NotOnOrAfter。 这对于 SAML 2 中的重放检测基本上是正确的。对于 SAML1.1 来说有点愚蠢(太宽泛、太长)。

应用程序可以(并且确实)在 TokenHandler(s) 或 WSFAM 和 SesAM 事件中覆盖此行为。参见 Vittorio 关于 Sliding Expiration 的例子。

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2019-03-06
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多