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

Posted

技术标签:

【中文标题】OpenIddict:如何在资源服务器中注册签名密钥以验证令牌?【英文标题】:OpenIddict: How to register signing key in the resource server for validating tokens? 【发布时间】:2021-06-18 19:55:24 【问题描述】:

我使用 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 文档和示例以确保您已正确配置所有内容? 【参考方案1】:

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

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

【讨论】:

以上是关于OpenIddict:如何在资源服务器中注册签名密钥以验证令牌?的主要内容,如果未能解决你的问题,请参考以下文章

OpenIddict 的临时关键问题

.NET 4.6 中的 OpenIddict 3 不可用令牌验证

IIS 重新启动后 JWKS 更改

OpenIddict:当两个或更多服务实例计数时出现 401 错误

gmssl国密证书生成方式:国密多级ca证书,国密加密证书,国密签名证书

OpenIddict使用教程