我使用Identityserver3作为我的IDP。我的RP是一个MVC5 .net Web应用程序。 Web应用程序使用idtoken创建其身份验证cookie。它传递访问令牌以通过Rest调用进行Web API身份验证。
我的身份证明有效期为5分钟 我的访问令牌有效期为60分钟 一旦用户验证自己,auth_cookie的生命周期为20分钟,滑动到期。
我的网络应用程序启动代码如下 -
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
CookieHttpOnly = true,
CookieSecure = CookieSecureOption.Always,
ExpireTimeSpan = TimeSpan.FromMinutes(sessionExpiryMinutes),
SlidingExpiration = true
});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
Authority = authority,
ClientId = clientId,
ResponseType = responseType,
SignInAsAuthenticationType = "Cookies",
Scope = scope,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
UseTokenLifetime = false, .....
当用户闲置20分钟时,应用程序cookie过期,用户被重定向到身份服务器并且新的cookie出现问题。
当用户保持会话处于活动状态时,如果用户在第60分钟处于活动状态,则会出现此问题,访问令牌将过期,并且使用此访问令牌的API会向我的Web应用程序发出A 401。此时,Web应用程序的cookie仍然有效,但由于访问令牌无效,因此无法与API通信。
我在这里做对了吗?如果访问令牌过期,我应该注销用户还是应该将访问令牌有效期扩展到更长的持续时间,例如5小时来解决此问题?或者我应该使饼干不滑动?非滑动cookie会让最终用户感到困惑,因为他将使用该应用程序,他将突然被重定向到IDP
编辑:我使用隐式流,因此我无法利用刷新令牌。