具有自定义生存期的Identity Server 4访问令牌

时间:2018-07-26 06:54:40

标签: access-token identityserver4

我有一种情况,我必须将自定义访问令牌返回给尚未验证其电子邮件的用户。无论为客户端指定的访问令牌生存期如何,访问令牌都必须在24小时后过期。

有没有一种方法可以指定每个任务的访问令牌的生存期。我已经实现了“ IResourceOwnerPasswordValidator ”界面。

我遇到的一个选择是使用身份服务器工具“ IdentityServerTools” 生成令牌,但不知道如何使用刷新令牌返回正确的令牌响应(仍需要生成)。

var token = await _identityServerTools.IssueClientJwtAsync(
                clientId: context.Request.Client.ClientId,
                lifetime: 86400, // 24 hours in seconds
                scopes: context.Request.Scopes
            );

1 个答案:

答案 0 :(得分:1)

以下代码未经测试,但可以解决:

internal class YourCustomTokenRequestValidator : ICustomTokenRequestValidator
{
    // your email checker which takes an `IClaimsPrincipal` parameter
    private readonly IEmailChecker emailChecker;
    public YourCustomTokenRequestValidator(IEmailChecker emailChecker)
    {
        this.emailChecker = emailChecker;
    }
    public Task ValidateAsync(CustomTokenRequestValidationContext context)
    {
        var request = context.Result.ValidatedRequest;
        var isVerified = false;
        var subject = request.Subject ?? request.AuthorizationCode?.Subject;
        if(subject != null)
        {
           isVerified = emailChecker.IsVerified(subject);
           if (!isVerified)
           {
              request.AccessTokenLifetime = 24 * 60 * 60;
           }
        } 

        return Task.CompletedTask;
    }
}

注册自定义实现:

services.AddIdentityServer()
           .AddCustomTokenRequestValidator<YourCustomTokenRequestValidator>()
            /// ;