承载未经过身份验证:签名验证失败

时间:2017-03-03 20:50:02

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

我正在使用Identity Server 4来保护我的API(隐式流模式),这些API由角度应用程序访问。每件事情都运转良好,但在特定时期,访问令牌在到期之前突然变得无效。

配置:

以下是Identity Server启动文件:

 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

经过一番调查后,身份服务器似乎正在生成一个新密钥,导致签名验证失败。

enter image description here

在日志中,我可以看到最后两个警告事件发生的时间,然后我看到"存储库包含没有可行的默认密钥"并且"应该在戒指中添加一个新密钥"

问题

为什么即使我使用临时签名(SetTemporarySigningCredential)并且我没有重新启动服务器,密钥有效期几乎为3个月时也没有密钥?

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. 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

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