Замени 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);
}

също има много различни опции като:

От дни, от часове, от милисекунди, от минути

person Sambad    schedule 18.02.2020