Я не думаю, что это хорошая идея - зайти внутрь сертифицированного 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 . Однако цель состоит в том, чтобы помочь вызывать внешние API изнутри IdSrv, а не выдавать какие-либо JWT по внешним запросам.
Если вам нужно запросить JWT извне (и следовать протоколу), вы должны использовать предопределенные конечные точки и подписи.