覆盖 AccessTokenExpireTimeSpan

Override AccessTokenExpireTimeSpan

是否可以覆盖自定义 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);
}

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

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

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

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

    ...
}

希望对您有所帮助。

编辑

正如 Michael in his 对类似问题所指出的那样,如果您对每个 client_id 有不同的 AccessTokenExpireTimeSpan,您可以在上下文选项中覆盖默认配置的 AccessTokenExpireTimeSpan验证客户端身份验证时与客户端一:

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

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

    ...
}

这适用于您的上下文(哈哈):

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

但请注意,每次调用都需要更新,否则您分配的最后一个值将保留用于下一次登录。

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

还有许多不同的选项,例如:

FromDays,FromHours,FromMilliseconds,FromMinutes