IdentityServer Session cookie 未滑动
IdentityServer Session cookie is not sliding
我遇到了一个奇怪的问题。我能够进行静默更新,但我的 IdP cookie 正在滑动。
更多问题...
我有一个 IdP session cookie (IdentityServer) 生命周期设置为 15 分钟后过期,我也为访问令牌和 ID 令牌生命周期保持相同的时间。
在我的 JavaScript 客户端上,我每 2 分钟检查一次用户 activity,如果在最后 2 分钟内有 activity,我将更新令牌。
我能够获得具有更新过期时间的访问令牌和 ID 令牌,但是 15 分钟后(IdP cookie 生命周期)静默更新调用失败并且 IdP 正在注销。
我检查过静默更新调用的响应,我在响应 headers.
中看到没有设置 cookie(具有新的滑动过期时间)
我应该在服务器端启用任何设置吗?感谢您的帮助。
正如@mackie 在评论中提到的,cookie 仅在过期一半时才会滑动...这与 Identity Server 无关,但与 .NET 框架有关
我通过这样做克服了它:
public class CustomCookieOptions : IConfigureNamedOptions<CookieAuthenticationOptions>
{
private readonly AppConfiguration _appConfiguration;
private const string UTC_DATE_TIME_FORMAT = "r";
private const string EXPIRES_KEY = ".expires";
public CustomCookieOptions(IOptions<AppConfiguration> appConfiguration)
{
_appConfiguration = appConfiguration.Value;
}
public void Configure(CookieAuthenticationOptions options)
{
}
public void Configure(string name, CookieAuthenticationOptions options)
{
options.Events.OnValidatePrincipal = context =>
{
if (context.Principal.Identity.IsAuthenticated &&
options.Cookie.Name == IdentityServerConstants.DefaultCookieAuthenticationScheme)
{
if (context.Properties.Items.ContainsKey(EXPIRES_KEY)
&& context.Request.Path.Value.StartsWith("/connect/authorize"))
{
var expiresAt = DateTimeOffset.Parse(context.Properties.Items[EXPIRES_KEY]);
if (DateTimeOffset.UtcNow <= expiresAt)
{
context.ShouldRenew = true;
context.Properties.Items[EXPIRES_KEY] =
DateTimeOffset.UtcNow.AddSeconds(_appConfiguration.CookieLifetimeInSeconds)
.ToString(UTC_DATE_TIME_FORMAT, CultureInfo.InvariantCulture);
}
}
}
return Task.CompletedTask;
};
}
然后注册:
services.AddSingleton<IConfigureOptions<CookieAuthenticationOptions>, CustomCookieOptions>();
我遇到了一个奇怪的问题。我能够进行静默更新,但我的 IdP cookie 正在滑动。 更多问题...
我有一个 IdP session cookie (IdentityServer) 生命周期设置为 15 分钟后过期,我也为访问令牌和 ID 令牌生命周期保持相同的时间。
在我的 JavaScript 客户端上,我每 2 分钟检查一次用户 activity,如果在最后 2 分钟内有 activity,我将更新令牌。
我能够获得具有更新过期时间的访问令牌和 ID 令牌,但是 15 分钟后(IdP cookie 生命周期)静默更新调用失败并且 IdP 正在注销。
我检查过静默更新调用的响应,我在响应 headers.
我应该在服务器端启用任何设置吗?感谢您的帮助。
正如@mackie 在评论中提到的,cookie 仅在过期一半时才会滑动...这与 Identity Server 无关,但与 .NET 框架有关
我通过这样做克服了它:
public class CustomCookieOptions : IConfigureNamedOptions<CookieAuthenticationOptions>
{
private readonly AppConfiguration _appConfiguration;
private const string UTC_DATE_TIME_FORMAT = "r";
private const string EXPIRES_KEY = ".expires";
public CustomCookieOptions(IOptions<AppConfiguration> appConfiguration)
{
_appConfiguration = appConfiguration.Value;
}
public void Configure(CookieAuthenticationOptions options)
{
}
public void Configure(string name, CookieAuthenticationOptions options)
{
options.Events.OnValidatePrincipal = context =>
{
if (context.Principal.Identity.IsAuthenticated &&
options.Cookie.Name == IdentityServerConstants.DefaultCookieAuthenticationScheme)
{
if (context.Properties.Items.ContainsKey(EXPIRES_KEY)
&& context.Request.Path.Value.StartsWith("/connect/authorize"))
{
var expiresAt = DateTimeOffset.Parse(context.Properties.Items[EXPIRES_KEY]);
if (DateTimeOffset.UtcNow <= expiresAt)
{
context.ShouldRenew = true;
context.Properties.Items[EXPIRES_KEY] =
DateTimeOffset.UtcNow.AddSeconds(_appConfiguration.CookieLifetimeInSeconds)
.ToString(UTC_DATE_TIME_FORMAT, CultureInfo.InvariantCulture);
}
}
}
return Task.CompletedTask;
};
}
然后注册:
services.AddSingleton<IConfigureOptions<CookieAuthenticationOptions>, CustomCookieOptions>();