2

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

經過一番調查後,似乎身份服務器產生這是導致簽名驗證失敗一個新的密鑰。

enter image description here

在日誌中,我可以當端的兩個警告事件發生看,然後我看到「庫不包含任何可行的默認鍵」和「新的密鑰應該被加入到環」

問題

爲什麼會有沒有是隨時一鍵在鍵壽命爲近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. 

我該如何解決這個問題?

+0

獲得真正的簽名證書而不是臨時證書 - 然後再次測試。 – leastprivilege

+0

你也在重新啓動API項目嗎?我認爲那個中間件緩存了發現文件。我可能是錯的。 – Lutando

回答

1

創建自簽名證書並刪除身份服務器上的臨時簽名可修復此問題。

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

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

爲什麼臨時簽名不起作用?這是在文檔中的任何地方提到的嗎? – stt106

+0

它的工作,但有時令牌甚至在其到期之前無效。這是在我們使用臨時簽名幾周後發現的,並不是一個簡單的方法。 – Coding

+0

我遇到了同樣的問題,例如令牌在到期之前過期。如果知道,爲什麼臨時簽名會導致這種情況? – stt106