Asp.net-Core-2.0
IdentityServer4 簽名密鑰、驗證密鑰和 .Net Core 數據保護
Identity Server 4 文件(此處為http://docs.identityserver.io/en/latest/topics/crypto.html?highlight=data%20protection)討論了簽名密鑰和驗證密鑰。我知道簽名密鑰是使用
AddSigningCredential(<X509Certificate2>)並且有兩個用於驗證密鑰的 API
AddValidationKey(<X509Certificate2>) AddValidationKeys(<Microsoft.IdentityModel.Tokens.AsymmetricSecurityKey[]>)該文件討論了簽名密鑰翻轉和向發現文件添加多個驗證密鑰。問題:
- 何時將 AddValidationKey 與 X509Certificate2 一起使用?即使您使用的是 AddSigningCredential,您是否需要這樣做?
- “您請求/創建新的密鑰材料”指的是什麼?這是新證書嗎?或者這是 Microsoft 數據保護密鑰?
- 什麼是非對稱安全密鑰?有沒有從 X509Certificate2 創建的方法?
- 我們正在使用 cookie 身份驗證 - ValidationKeys 是否與 Net Core 2.0 中儲存的 PersistKeysToAzureBlobStorage 的密鑰相同?(https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.1&tabs=aspnetcore2x)
IdentityServer 使用非對稱加密。非對稱加密意味著你有一個公鑰和一個私鑰。公鑰是共享的(顯然)並且僅用於加密。私鑰是私人的。它應該受到嚴格的保護,從不共享,它是用來解密的。簽名密鑰是您的公鑰,而驗證密鑰是您的私鑰,所以是的,您需要兩者。可以使用 X509Certicate,因為證書同時使用公鑰和私鑰,但最終,IdentityServer 只是使用證書來獲取密鑰。
(
AddValidationKeys複數)方法顯式用於密鑰翻轉。例如,您的證書可能會在一年後過期(大多數情況下為預設值)。在該期限結束時,您將用新證書替換它。但是,客戶端可能仍然擁有訪問令牌,並且通過先前證書中的公鑰進行了加密,並且 IdentityServer 將需要先前證書中的私鑰來解密它。使用此方法,您可以添加以前的密鑰,僅用於驗證 IdentityServer 無法使用目前密鑰驗證的材料。數據保護確實是完全獨立的。它也使用公鑰和私鑰來完成它的工作,因此從技術上講,您也可以對 IdentityServer 使用相同的密鑰。但是,最好將您的密鑰限制在獨特的用途上。這樣,如果您確實受到了損害,您並沒有完全受到損害,並且可以在一定程度上限制潛在洩漏的範圍。