jwt - 承载未通过身份验证 : Signature validation failed

标签 jwt access-token identityserver4 thinktecture-ident-server

我正在使用 Identity Server 4 来保护由 angular 应用程序访问的 API(隐式流模式)。一切正常,但是在特定时期,访问 token 甚至在其到期之前突然变得无效。

配置:

这是身份服务器启动文件:

 var identityBuilder = services.AddIdentityServer().AddInMemoryStores().SetTemporarySigningCredential();

 identityBuilder.AddInMemoryScopes(identitySrvConfig.GetScopes());
 identityBuilder.AddInMemoryClients(identitySrvConfig.GetClients());

保护 API:
   app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = identityOptions.Authority,
            ScopeName = "userProfile_api",


            RequireHttpsMetadata = false
        });

调查:

问题是持票人未经过身份验证
Bearer was not authenticated. Failure message: IDX10501: Signature validation failed. Unable to match 'kid': 'e4f3534e5afd70ba74c245fe2e39c724', token

经过一些调查,似乎身份服务器正在生成导致签名验证失败的新 key 。

enter image description here

在日志中,我可以看到最后两个警告事件何时发生,然后我看到“存储库不包含可行的默认 key ”和“应将新 key 添加到环中”

问题

即使我使用临时签名 (SetTemporarySigningCredential) 并且我没有重新启动服务器,当 key 生命周期接近 3 个月时,为什么在任何时候都没有 key ?
Creating key {a2fffa4a-345b-4f3b-bae7-454d567a1aee} with creation date 2017-03-03 19:15:28Z, activation date 2017-03-03 19:15:28Z, and expiration date 2017-06-01 19:15:28Z. 

我该如何解决这个问题?

最佳答案

创建自签名证书并删除身份服务器上的临时签名解决了该问题。

var signingCertificate = new X509Certificate2("ReplaceByCertificatePath, "ReplaceByPasswordCertificate");
var identityBuilder = services.AddIdentityServer().AddInMemoryStores().SetSigningCredential(signingCertificate);

identityBuilder.AddInMemoryScopes(IdentitySrvConfig.GetScopes());
identityBuilder.AddInMemoryClients(IdentitySrvConfig.GetClients());

关于jwt - 承载未通过身份验证 : Signature validation failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588203/

相关文章:

php - 在函数中两次使用 Config::set() 的方法

node.js - 如何在node.js Passport 中通过twitter登录后使用访问 token 对用户进行身份验证

php - PHP 的 fb_exchange_token 仅在用户删除应用程序后才有效

服务器重新启动后的 IdentityServer4 访问 token

asp.net - Blazor WebAssembly 登录身份验证/从 .well-known/openid-configuration 登录提供本地主机 URL,而不是公共(public) URL

asp.net-core - 使用 OpenId Connect 进行基于声明的身份验证

google-app-engine - 从 Angular 访问受 Google IAP 保护的 API

ios - 如何快速从 NSHTTPCookies 获取服务器 jwt?

amazon-web-services - 从 EndPoint LocalStorage AWS Cognito 获取访问 token

c# - Bearer 被 IdentityServer4 中的授权过滤器禁止