问题描述
我使用 OpenIddict。我想用对称密钥签署令牌。我已将授权服务器配置为使用 OpenIddict。这是启动文件中的代码。
services.AddOpenIddict()
.AddServer(options =>
{
options.SetTokenEndpointUris("/connect/token");
options.AllowPasswordFlow()
.AllowRefreshTokenFlow();
options.AcceptAnonymousClients();
options.AddDevelopmentEncryptionCertificate()
.AddDevelopmentSigningCertificate()
.disableAccesstokenEncryption();
options.UseAspNetCore();
options.RegisterScopes(OpenIddictConstants.Scopes.OfflineAccess); //This is for grant_type=refresh_token.
options.EnableDegradedMode();
options.AddEventHandler<ValidatetokenRequestContext>(c => c.UseSingletonHandler<TokenRequestValidator>());
options.AddEventHandler<HandletokenRequestContext>(c => c.UseSingletonHandler<TokenRequestHandler>());
var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("b14ca5898a4e4133bbce2ea2315a1916")); //this is for example
options.AddSigningKey(key);
});
当我从授权服务器收到令牌并调用资源服务器时,它以 401 Unauthorized 响应。
services.AddOpenIddict().AddValidation(options =>
{
// Register the ASP.NET Core host.
options.UseAspNetCore();
options.UseSystemNetHttp();
options.SetIssuer("https://localhost:44340/");
});
请帮我正确设置配置。
解决方法
如果您想使用对称密钥进行令牌验证,您需要在 OpenIddict 验证选项中注册它,因为发现端点不会公开对称密钥。
services.AddOpenIddict()
.AddValidation(options =>
{
options.Configure(o => o.TokenValidationParameters.IssuerSigningKey = key);
});