Значение срока действия cookie игнорируется в CookieAutenticationHandler - PullRequest
0 голосов
/ 16 октября 2019

Я пытался установить срок действия моего файла cookie сеанса. Итак, сначала я настроил свой обработчик Cookie следующим образом:

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options => 
{
    options.Cookie.Expiration = TimeSpan.FromSeconds(3600);
})
.AddOpenIdConnect(...

Хотя это казалось простым, это не так. Файл cookie всегда создавался как сеанс (не сохраняется).

Я изучал CookieAuthenticationHandler и обнаружил следующее:

protected async override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties)
{
    if (user == null)
    {
        throw new ArgumentNullException(nameof(user));
    }

    properties = properties ?? new AuthenticationProperties();

    _signInCalled = true;

    // Process the request cookie to initialize members like _sessionKey.
    await EnsureCookieTicket();
    var cookieOptions = BuildCookieOptions();
    ...
}

Удивительно, что в методе BuildCookieOptions устанавливает в ноль срок действия, который я настроил при запуске:

private CookieOptions BuildCookieOptions()
{
    var cookieOptions = Options.Cookie.Build(Context);
    // ignore the 'Expires' value as this will be computed elsewhere
    cookieOptions.Expires = null;

    return cookieOptions;
}

Он говорит, что значение 'Expires' будет вычислено в другом месте.

Наконец, я видел в другихнапишите, что при использовании RemoteAuthenticationHandler, подобном тому, который используется OpenId, обработчик инициирует событие OnTicketRecived, срок действия которого может быть установлен путем реализации этого события в конфигурации обработчика OpenId:

.AddOpenIdConnect("oidc", options =>
{
    options.SignInScheme = "Cookies";
    options.ClientId = "client";

    options.Events.OnTicketReceived = async (context) => 
    {
        context.Properties.ExpiresUtc = DateTime.UtcNow.AddSeconds(3600);
        context.Properties.IsPersistent = true;
    };

Но почему этоЗначение срока действия абсолютно игнорируется? Почему CookieAuthenticationOptions позволяет мне устанавливать это свойство, но первое, что делает обработчик - устанавливает его в ноль? Используется ли это свойство?

Или я просто что-то упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...