2015-08-20 6 views
7

È possibile sovrascrivere l'AccessTokenExpireTimeSpan predefinito per un ticket specifico su un OAuthAuthorizationServerProvider personalizzato? Il tempo di scadenza predefinito per tutti gli altri biglietti è di 15 minuti.Ignora AccessTokenExpireTimeSpan

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); 
} 

Il token generato con condizione == true ha il tempo di scadenza predefinito (15 minuti). Non vorrei modificare il contesto.Options.AccessTokenExpireTimeSpan perché influisce su tutti i token e non è questa l'idea.

risposta

11

è necessario impostare l'ora di scadenza nel metodo TokenEndPoint invece di GrantResourceOwnerCredentials metodo:

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

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

    ... 
} 

spero che aiuta.

EDIT

Come sottolineato da Michael nel suo response a una domanda simile, se si dispone di un diverso AccessTokenExpireTimeSpan per ogni client_id è possibile ignorare il predefinito configurato AccessTokenExpireTimeSpan nelle opzioni di contesto con il cliente uno quando la convalida del autenticazione client:

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

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

    ... 
}