2

SharePoint 使用 SAML 1.1 作为联合身份验证协议。用户将登录到受信任的身份提供者,并将 SAML 令牌发布到 SharePoint 站点,作为登录到 SharePoint 的一种方式。

我惊讶地发现 SAML 令牌的生命周期与用户的会话直接相关。默认情况下,这似乎是 10 小时,这似乎很慷慨。

如果我向 SharePoint 发出 SAML 令牌,有什么措施可以防止重放攻击?似乎这个令牌帖子在用户会话的整个生命周期内都是可重播的。我本来希望令牌的生命周期足够长以进行身份​​验证。有什么我遗漏的或者这是一个安全漏洞吗?

4

1 回答 1

3

SharePoint 中的会话生命周期将不等于 SAML 令牌生命周期,而是等于 SAML 令牌 ValidTo 属性(即绝对日期时间),因此重播将一直工作到该绝对时间。

但不仅如此,SharePoint 还依赖于一个名为LogonTokenCacheExpirationWindow. 在我看来,它带来的困惑多于什么价值,但它就在那里,你必须明白会话的有效性将取决于它

在伪代码中,这就是 SharePoint 内部发生的情况

SessionToken Lifetime = SAML Token Lifetime (by default)
if (SessionToken Lifetime - LogonTokenCacheExpirationWindow < DateTime.UtcNow)
    Logout()

在这里,您可以使用 LogonTokenExpirationWindow = 40 分钟和 SAML 令牌生命周期 1 小时来说明这一点。

LogonTokenCacheExpirationWindow可以这样更改:

$sts = Get-SPSecurityTokenServiceConfig
$sts.LogonTokenCacheExpirationWindow = (New-TimeSpan -minutes 1)
$sts.Update()

SAML 令牌生命周期(如果您使用 ADFS)可以这样更改:

Set-ADFSRelyingPartyTrust -TargetName "My SP2010" -TokenLifetime 5

最后,值得注意的是,SharePoint 默认会发出持久性 cookie。因此,当您关闭浏览器并再次打开它时,它将使用该持久 cookie。您可以通过设置更改它

$sts = Get-SPSecurityTokenServiceConfig
$sts.UseSessionCookies = $true
$sts.Update()
iisreset
于 2013-04-04T17:17:23.843 回答