具有自定义生命周期的身份服务器 4 访问令牌

Posted

技术标签:

【中文标题】具有自定义生命周期的身份服务器 4 访问令牌【英文标题】:Identity server 4 access token with custom lifetime 【发布时间】:2019-01-03 02:06:13 【问题描述】:

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

有没有办法指定每个任务的访问令牌的生命周期。我已经实现了“IResourceOwnerPasswordValidator”接口。

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

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

【问题讨论】:

这个问题和你的情况类似,可能对你有帮助github.com/IdentityServer/IdentityServer4/issues/2112 @ademcaglin 我遇到了这个 github 问题,但它没有提供太多帮助。 【参考方案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>()
            /// ;

【讨论】:

什么命名空间包含这个扩展方法? AddCustomTokenRequestValidator @GabrielMartinezBustos Microsoft.Extensions.DependencyInjection

以上是关于具有自定义生命周期的身份服务器 4 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

IdentityServer4 访问令牌生命周期

访问和刷新令牌的生命周期

更改 Azure AD B2C 访问令牌生命周期不起作用

如何在 Sails 中恢复生命周期回调?

如何在 Keycloak 中指定刷新令牌的生命周期

身份服务器 3 用户会话生命周期