Owin WS-Federation 设置令牌滑动到期

Owin WS-Federation setting up token sliding expiration

有人可以解释如何使用新的 Owin WS-Federation 插件实现滑动过期吗?

在客户端,在 WS-Fedeartion configuration 我看到有一些 events 比如:

  Notifications = new WsFederationAuthenticationNotifications
            {
                SecurityTokenReceived = ...,
                AuthenticationFailed = ...,
                RedirectToIdentityProvider = ...,
                MessageReceived = ...,
                SecurityTokenValidated = ....
            },

但是因为缺乏文档我真的不知道在哪里和怎么做?

目前我的 STS 正在发行绝对到期的令牌:

 protected override Lifetime GetTokenLifetime(Lifetime requestLifetime)
 {
        // 5 Minutes for token lifetime
        var lifetime = new Lifetime(DateTime.UtcNow, DateTime.UtcNow.AddMinutes(5));
        return lifetime;
 }

非常感谢任何帮助。

TL;DR:WsFederationAuthenticationOptions.UseTokenLifetime 设置为 false,以重新启用滑动过期

在OWIN/Katana中,滑动过期概念仅限于cookies中间件并且默认启用(您可以通过将 CookieAuthenticationOptions.SlidingExpiration 设置为 false 来关闭它:https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.Cookies/CookieAuthenticationOptions.cs).

当您使用 app.UseWsFederationAuthentication(或 app.UseOpenIdConnectAuthentication)时,它实际上依赖于另一个中间件来在您完成身份验证流程时保留 ClaimsIdentity。 "persistence delegation" 可以通过 SignInAsAuthenticationTypeapp.SetDefaultSignInAsAuthenticationType.

配置

通常,这个 SignInAsAuthenticationType 属性 对应于一个 cookie 中间件:这样,滑动过期不是在 WS-Federation 中间件级别管理的,而是由 cookie 中间件管理的,它将自动更新满足滑动过期条件时的身份验证 cookie。在这种情况下,您的身份提供商颁发的身份验证令牌将不会更新。为此,您需要将 WsFederationAuthenticationOptions.UseTokenLifetime 设置为 false,因为当您使用默认值时,滑动过期将被禁用并且 cookie 生命周期与令牌生命周期相匹配。

如果您使用 WS-Fed 进行身份验证(即您只想知道您的用户是谁),使用滑动过期可能是个好主意。但是,如果您需要在远程服务器上进行一些 API 调用,您的用户可能会在安全令牌过期后很长时间内完成身份验证。