首页 > 解决方案 > 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/");

        });

请帮助我正确设置配置。

标签: c#oauth-2.0jwtauthorizationopeniddict

解决方案


如果要使用对称密钥进行令牌验证,则需要在 OpenIddict 验证选项中注册它,因为发现端点不会公开对称密钥。

services.AddOpenIddict()
    .AddValidation(options =>
    {
        options.Configure(o => o.TokenValidationParameters.IssuerSigningKey = key);
    });

推荐阅读