我正在使用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