有人可以解释如何使用新的 Owin WS-Federation 插件实现滑动过期吗?
在客户端,在WS-Fedeartion 配置,我发现有一些事件,如:
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;
}
非常感谢任何帮助。
答案 0 :(得分:14)
TL; DR:将WsFederationAuthenticationOptions.UseTokenLifetime
设置为false
,以重新启用滑动过期。
在OWIN / Katana中,滑动到期概念仅限于 Cookie中间件,默认情况下启用(您可以通过设置CookieAuthenticationOptions.SlidingExpiration
将其关闭到false
:https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.Cookies/CookieAuthenticationOptions.cs)。
当您使用app.UseWsFederationAuthentication
(或app.UseOpenIdConnectAuthentication
)时,它实际上依赖于另一个中间件来在您完成身份验证流程时保留ClaimsIdentity
。这个"持久性授权"可以通过SignInAsAuthenticationType
或app.SetDefaultSignInAsAuthenticationType
配置。
通常,此SignInAsAuthenticationType
属性对应于cookie中间件:这样,滑动到期不在WS-Federation中间件级别进行管理,而是由cookie中间件管理,这将在滑动到期时自动续订身份验证cookie条件得到满足。在这种情况下,您的身份提供商发布的身份验证令牌不会续订。为此,您需要将WsFederationAuthenticationOptions.UseTokenLifetime
设置为false
,因为当您使用默认值时,将禁用滑动过期,并且Cookie生命周期与令牌生存期匹配。
如果您使用WS-Fed进行身份验证(即您只想知道您的用户是谁),使用滑动过期可能是一个好主意。但是,如果您需要在远程服务器上进行一些API调用,那么您的用户可能会在安全令牌到期后很长时间内进行身份验证。