В моем ASP. NET Core Web API я вручную генерирую токен для насмешливых целей. Однако, похоже, что генератор токенов предполагает, что подпись имеет закрытый ключ, хотя это не так. Ключ - publi c, полученный из JWKS. Я не знаю, как объяснить это генератору токенов. Может кто-нибудь мне помочь? Это мой код:
private async Task<string> GenerateSecurityToken(string _expDate, string _issuer, string _audience, string _wellKnownEndpoint)
{
var configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(_wellKnownEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConfig = await configurationManager.GetConfigurationAsync(CancellationToken.None);
SecurityKey securityKey = openIdConfig.SigningKeys.Last();
var tokenDescriptor = new SecurityTokenDescriptor()
{
Subject = new ClaimsIdentity(),
Expires = DateTime.UtcNow.AddMinutes(double.Parse(_expDate)),
Audience = _audience,
Issuer = _issuer,
SigningCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.RsaSha256Signature)
};
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken token = tokenHandler.CreateToken(tokenDescriptor); // Raises exception
return tokenHandler.WriteToken(token);
}
И это повышенное исключение:
System.InvalidOperationException: IDX10638: Невозможно создать SignatureProvider, 'key.HasPrivateKey' ложно, не может создавать подписи.