OpenIddict:如何在资源服务器中注册签名密钥以验证令牌?

问题描述

我使用 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);
    });