[英]Are there any IdentityServer4 services (not endpoints) for token handling?
我在同一个项目中有IdentityServer4和Web API,我想在我自己的控制器中使用IdentityServer令牌处理,例如我想在我自己的控制器中发出令牌,刷新标记,撤销令牌而不调用其他内置的IdentityServer端点。 有这样的东西我有什么服务吗? 谢谢
我需要下面的someIdentityServerService
[AllowAnonymous]
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] UserLoginRequestDto model)
{
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null || !await _userManager.CheckPasswordAsync(user, model.Password))
{
return BadRequest("Wrong email or password!");
}
// do some other stuff
var token = await someIdentityServerService.GetAccessTokenAsync(user);
return Ok(token);
}
我不认为,进入经过认证的IdP并按照您自己的顺序调用内部,而不是协议定义的顺序是个好主意。
不过,你可以通过查看实现和调用或覆盖来做到这一点。 Identity Server非常灵活,使用标准DI可以覆盖几乎所有内容。
例如
var identityPricipal = await _principalFactory.CreateAsync(user);
var identityUser = new IdentityServerUser(user.Id.ToString())
{
AdditionalClaims = identityPricipal.Claims.ToArray(),
DisplayName = user.UserName,
AuthenticationTime = DateTime.UtcNow,
IdentityProvider = IdentityServerConstants.LocalIdentityProvider
};
var request = new TokenCreationRequest();
request.Subject = identityUser.CreatePrincipal();
request.IncludeAllIdentityClaims = true;
request.ValidatedRequest = new ValidatedRequest();
request.ValidatedRequest.Subject = request.Subject;
request.ValidatedRequest.SetClient(Config.Clients().First());
request.Resources = new Resources(Config.IdentityResources(), new List<ApiResource>());
request.ValidatedRequest.Options = _options;
request.ValidatedRequest.ClientClaims = identityUser.AdditionalClaims;
var token = await _tokenService.CreateAccessTokenAsync(request);
token.Issuer = "...";
return await _tokenService.CreateSecurityTokenAsync(token);
更方便的创建令牌的方法是使用IdentityServerTools 。 但是,其目的是帮助从IdSrv中调用外部API,而不是通过外部请求发出任何JWT。
如果您需要从外部请求JWT(并遵循协议),则必须使用预定义的端点和签名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.