Файл cookie IdentityServer Session не скользит
Я столкнулся со странной проблемой. Я могу выполнить обновление без вывода сообщений, но мой файл cookie IdP становится скользящим. Больше в проблеме...
У меня есть время жизни cookie сеанса IdP (IdentityServer), истекающее через 15 минут, и я сохранил одно и то же время для маркера доступа и токена id.
На моем клиенте JavaScript я проверяю активность пользователя каждые 2 минуты, и если в течение последних 2 минут активность была, я обновляю токен.
Я могу получить токен доступа и токен идентификатора с обновленным временем истечения, но через 15 минут (время жизни cookie IdP) неактивные вызовы возобновления завершаются неудачно, и IdP выходит из системы.
Я проверил ответ молчаливого возобновления вызова, и я не вижу, чтобы в заголовках ответа были установлены файлы cookie (с новым временем истечения срока действия).
Есть ли какие-либо настройки, которые я должен включить на стороне сервера? Ценю твою помощь.
1 ответ
Как упомянуто в комментариях @mackie, cookie будет сдвигаться только в том случае, если истек срок его действия на полпути... и это не имеет ничего общего с Identity Server, но.NET Framework
Я смог преодолеть это, сделав это:
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>();