覆盖AccessTokenExpireTimeSpan

Max*_*hen 9 oauth-2.0 asp.net-web-api2

是否可以覆盖自定义OAuthAuthorizationServerProvider上特定故障单的默认AccessTokenExpireTimeSpan?所有其他票证的默认到期时间为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);
}
Run Code Online (Sandbox Code Playgroud)

条件== true的生成标记具有默认的到期时间(15分钟).我不想更改context.Options.AccessTokenExpireTimeSpan,因为它影响所有令牌,这不是主意.

jum*_*uro 15

您必须在TokenEndPoint方法中设置到期时间而不是GrantResourceOwnerCredentials方法:

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.

编辑

正如迈克尔回答类似问题时指出的那样,如果AccessTokenExpireTimeSpan每个client_id 都有不同的内容,则可以AccessTokenExpireTimeSpan在验证客户端身份验证时覆盖客户端上下文选项中配置的默认值:

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)