Переопределить AccessTokenExpireTimeSpan

Можно ли переопределить AccessTokenExpireTimeSpan по умолчанию для определенного билета в пользовательском OAuthAuthorizationServerProvider? Время истечения срока действия по умолчанию для всех остальных билетов составляет 15 минут.

public public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    ...
    var ticket = new AuthenticationTicket(identity, properties);

    if (condition)
    {
        ticket.Properties.IssuedUtc = DateTime.UtcNow;
        ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
    }

    context.Validated(ticket);
}

Сгенерированный токен с условием == true имеет срок действия по умолчанию (15 минут). Я бы не хотел менять context.Options.AccessTokenExpireTimeSpan, потому что он влияет на все токены, а это не идея.


person Max Bündchen    schedule 20.08.2015    source источник


Ответы (3)


Вы должны установить время истечения в методе TokenEndPoint вместо метода GrantResourceOwnerCredentials:

public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
    ...

    if (condition)
    {
        context.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
    }

    ...
}

Я надеюсь, что это помогает.

ИЗМЕНИТЬ

Как указал Майкл в своем ответ на аналогичный вопрос, если у вас есть разные AccessTokenExpireTimeSpan для каждого client_id, вы можете переопределить настроенный по умолчанию AccessTokenExpireTimeSpan в параметрах контекста с клиентом при проверке аутентификации клиента:

public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
    ...

    context.Options.AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(client.AccessTokenExpireTime);

    ...
}
person jumuro    schedule 21.08.2015

Это работает в контексте (ха-ха), у вас есть:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
     context.Options.AccessTokenExpireTimeSpan = YourCustomExpiryTimeHere();
} 

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

person noelicus    schedule 16.06.2018

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
// Note: a= how much time u want
    Startup.OAuthOptions.AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(a);
}

также есть много разных вариантов, таких как:

FromDays, FromHours, FromMilliseconds, FromMinutes

person Sambad    schedule 18.02.2020