身份服务器4:为啥我在调用授权控制器时收到“找不到签名密钥”

Posted

技术标签:

【中文标题】身份服务器4:为啥我在调用授权控制器时收到“找不到签名密钥”【英文标题】:identity server4: Why I receiving "The signature key was not found" when calling the authorized controller身份服务器4:为什么我在调用授权控制器时收到“找不到签名密钥” 【发布时间】:2019-03-20 13:30:31 【问题描述】:

当前正在运行身份服务器 4,并且能够使用 client_credential 流接收访问令牌。

我使用令牌从服务器访问 api 但收到此消息

error="invalid_token", error_description="未找到签名密钥"

我怀疑在调用 web api 时传递令牌时需要以某种方式验证令牌。

我的设置是这样的。

services.AddAuthentication(options =>
            
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            )
            .AddJwtBearer(options =>
            
                options.Authority = Configuration.GetValue<string>("ApiAuthorityBaseUrl");
                options.Audience = "api1";
                options.RequireHttpsMetadata = false; 
            );

并使用 AddDeveloperSigningCredential。

AddJwtBearer 中有一个叫做 TokenValidationParameters 的东西,我不确定它是否是解决问题的正确位置。谁能给我一些提示

【问题讨论】:

能否提供 Identity Server 的日志输出? 【参考方案1】:

中间件 (AddJwtBearer) 正在尝试在 id_token 中查找签名以验证权限 - .well-known/openid-configuration/jwks 密钥。可能您的令牌可能没有私钥签名。

在您的情况下,权限可能来自不同的位置(实例的克隆),该位置可能具有相同的参数,但不是签名密钥。

【讨论】:

也可能是您使用了错误的授权(克隆在不同的实例上运行)颁发的令牌。在这种情况下,每个机构的签名都会不同。

以上是关于身份服务器4:为啥我在调用授权控制器时收到“找不到签名密钥”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我找不到 SSL 握手的信任库?

如何在 Lumen 中使用身份验证进行用户登录?为啥我在启动时看到“未经授权”?

为啥我在本地 TomEE 1.6 中收到 HsqlException?

通过尝试从肥皂服务检索数据,HTTP 请求未经授权

WCF Rest 自托管证书安全服务返回 401 未经授权

我在找不到 Swift4 时加载 json 数据时遇到问题,为啥?