Asp.net-Core-2.0

IdentityServer4 簽名密鑰、驗證密鑰和 .Net Core 數據保護

  • September 7, 2020

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[]>) 

該文件討論了簽名密鑰翻轉和向發現文件添加多個驗證密鑰。問題:

IdentityServer 使用非對稱加密。非對稱加密意味著你有一個公鑰和一個私鑰。公鑰是共享的(顯然)並且僅用於加密。私鑰是私人的。它應該受到嚴格的保護,從不共享,它是用來解密的。簽名密鑰是您的公鑰,而驗證密鑰是您的私鑰,所以是的,您需要兩者。可以使用 X509Certicate,因為證書同時使用公鑰和私鑰,但最終,IdentityServer 只是使用證書來獲取密鑰。

AddValidationKeys複數)方法顯式用於密鑰翻轉。例如,您的證書可能會在一年後過期(大多數情況下為預設值)。在該期限結束時,您將用新證書替換它。但是,客戶端可能仍然擁有訪問令牌,並且通過先前證書中的公鑰進行了加密,並且 IdentityServer 將需要先前證書中的私鑰來解密它。使用此方法,您可以添加以前的密鑰,僅用於驗證 IdentityServer 無法使用目前密鑰驗證的材料。

數據保護確實是完全獨立的。它使用公鑰和私鑰來完成它的工作,因此從技術上講,您也可以對 IdentityServer 使用相同的密鑰。但是,最好將您的密鑰限制在獨特的用途上。這樣,如果您確實受到了損害,您並沒有完全受到損害,並且可以在一定程度上限制潛在洩漏的範圍。

引用自:https://stackoverflow.com/questions/52080427