具有自定义生命周期的身份服务器 4 访问令牌
Identity server 4 access token with custom lifetime
我有一个场景,我必须 return 为未验证 his/her 电子邮件的用户自定义访问令牌。无论为客户端指定的访问令牌生命周期如何,访问令牌都必须在 24 小时后过期。
有没有办法指定每个任务的访问令牌的生命周期。我已经实现了“IResourceOwnerPasswordValidator”接口。
我遇到的一个选择是使用身份服务器工具"IdentityServerTools"
生成令牌,但不知道如何 return 使用刷新令牌(仍然需要生成)来正确响应令牌。
var token = await _identityServerTools.IssueClientJwtAsync(
clientId: context.Request.Client.ClientId,
lifetime: 86400, // 24 hours in seconds
scopes: context.Request.Scopes
);
以下代码未经测试,但可能是一个解决方案:
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>()
/// ;
我有一个场景,我必须 return 为未验证 his/her 电子邮件的用户自定义访问令牌。无论为客户端指定的访问令牌生命周期如何,访问令牌都必须在 24 小时后过期。
有没有办法指定每个任务的访问令牌的生命周期。我已经实现了“IResourceOwnerPasswordValidator”接口。
我遇到的一个选择是使用身份服务器工具"IdentityServerTools" 生成令牌,但不知道如何 return 使用刷新令牌(仍然需要生成)来正确响应令牌。
var token = await _identityServerTools.IssueClientJwtAsync(
clientId: context.Request.Client.ClientId,
lifetime: 86400, // 24 hours in seconds
scopes: context.Request.Scopes
);
以下代码未经测试,但可能是一个解决方案:
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>()
/// ;