我正在使用Identity Server 4来保护由角度应用程序访问的我的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
经过一番调查后,似乎身份服务器产生这是导致签名验证失败一个新的密钥。
在日志中,我可以当端的两个警告事件发生看,然后我看到“库不包含任何可行的默认键”和“新的密钥应该被加入到环”
问题
为什么会有没有是随时一键在键寿命为近3个月,即使我使用临时签名(SetTemporarySigningCredential)和我没有重新启动服务器?
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.
我该如何解决这个问题?
获得真正的签名证书而不是临时证书 - 然后再次测试。 – leastprivilege
你也在重新启动API项目吗?我认为那个中间件缓存了发现文件。我可能是错的。 – Lutando