Jim*_*hel 6 authentication wif thinktecture-ident-server
我在依赖方应用程序中实现了滑动会话,如WIF 4.5的滑动会话中所述.尽管这样做很有效,但是有一个问题似乎没有人谈论过.
正如链接的博客文章指出的那样,当RP令牌到期时,下次发出请求时,将从STS重新发出令牌.当然,假设STS会话的生命周期比RP的会话生存期长,如果你正在实现滑动会话,几乎可以肯定.
无论如何,这完全打败了滑动会话的全部要点.
似乎没有人在谈论RP会话到期时该怎么做.我想要的是,如果RP会话超时(通常是因为有人离开他的桌子10分钟),我的应用程序是否会重定向到用户可以重新进行身份验证的STS登录页面,然后被重定向回我要求的页面; 或者也许是我提出请求时我所在的页面.
我几乎可以肯定这是可能的,但我完全不知道它是如何完成的.
这是我在global.asax中的代码:
    private const int InactivityTimeout = 5; // minutes
    void SessionAuthenticationModule_SessionSecurityTokenReceived
        (object sender, SessionSecurityTokenReceivedEventArgs e)
    {
        var now = DateTime.UtcNow;
        var validFrom = e.SessionToken.ValidFrom;
        var validTo = e.SessionToken.ValidTo;
        double halfSpan = (validTo - validFrom).TotalMinutes/2;
        if (validFrom.AddMinutes(halfSpan) < now && now < validTo)
        {
            // add more time
            var sam = sender as SessionAuthenticationModule;
            e.SessionToken = sam.CreateSessionSecurityToken(
                e.SessionToken.ClaimsPrincipal,
                e.SessionToken.Context,
                now,
                now.AddMinutes(InactivityTimeout),
                e.SessionToken.IsPersistent);
            e.ReissueCookie = true;
        }
        else
        {
            // re-authenticate with STS
        }
    }
我的问题:
else条款是否适合放置重新认证逻辑?我建议您同步 STS 和 RP 上的会话生命周期。
您可以在STS上将会话生存时间设置为10分钟,在RP上将会话生存时间设置为10分钟,并在RP上使用滑动会话方式。10 分钟不活动后,两个会话都将过期,并且应要求用户重新进行身份验证。
如果您有多个 RP,您可以实现从 RP 到 STS 的一种保持活动状态 - 例如,在 RP 上的每个网页中加载来自 STS 的资源。每当在 RP 上加载页面时,都会从 STS 加载保持活动资源 - 刷新 STS 会话。10 分钟不活动后,它们都会超时,用户必须重新进行身份验证。
“来自 STS 的资源”可能意味着在不可见的 iframe 中加载的网页(Web 表单/MVC)。重要的是它是一个托管处理程序,因此请求由 ASP.NET 处理。
至于您的问题,如果您同步会话生命周期,以便它们一起超时:
为了完整起见,如果您无法同步会话生命周期,则可以在 RP 会话过期时触发联合注销。以下代码片段会在配置的发行者 (STS) 处触发注销。您可以将其放在 else 子句中,以在 RP 会话过期后触发第一个请求的注销:
using System.IdentityModel.Services; //WIF 4.5
var stsAddress = new Uri(FederatedAuthentication.FederationConfiguration.WsFederationConfiguration.Issuer);
WSFederationAuthenticationModule.FederatedSignOut(stsAddress, null); //Optional replyUrl set to null
希望有帮助!
| 归档时间: | 
 | 
| 查看次数: | 2914 次 | 
| 最近记录: |