IdentityServer Session cookie не скользит - PullRequest
0 голосов
/ 14 ноября 2018

У меня странная проблема.Я могу выполнить обновление без вывода сообщений, но мой файл cookie IdP становится скользящим.Подробнее о проблеме ...

У меня есть срок действия файла cookie сеанса IdP (IdentityServer), срок действия которого истекает через 15 минут, и я сохранил одно и то же время для маркера доступа и маркера идентификатора тоже.

В моем клиенте JavaScript я проверяю активность пользователя каждые 2 минуты и, если в течение последних 2 минут есть активность, я обновляю токен.

Я могу получить токен доступа и токен id с продленным сроком действияраз, но через 15 минут (время жизни cookie IdP) тихие вызовы возобновления не выполняются, и IdP выходит из системы.Я проверил ответ на запрос автоматического возобновления, и я не вижу, чтобы в заголовках ответа были установлены файлы cookie (с новым временем истечения скольжения).

Есть ли какие-либо настройки, которые я должен включить на стороне сервера?Ценю вашу помощь.

1 Ответ

0 голосов
/ 27 ноября 2018

Как упомянул @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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...