IdentityServer4签名密钥,验证密钥和.Net Core数据保护

时间:2018-08-29 14:50:30

标签: asp.net-core-2.0 identityserver4 asp.net-core-identity

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

该文档讨论有关签署密钥过渡并将多个验证密钥添加到发现文档的问题。问题-

1 个答案:

答案 0 :(得分:4)

IdentityServer使用非对称加密。非对称加密意味着您具有公共密钥和私有密钥。公共密钥是共享的(显然),仅用于加密。私钥是私有的。应该严格保护它,并且永远不要共享它,并用于解密。签名密钥是您的公钥,而验证密钥是您的私钥,所以是的,您需要两者。可以使用X509Certicate,因为证书同时使用了公钥和私钥,但是最终IdentityServer只是使用证书来获取密钥。

AddValidationKeys(复数)方​​法明确用于密钥翻转。例如,您的证书可能会在一年后过期(在大多数情况下为默认值)。在此期间结束时,您将其替换为新证书。但是,客户端可能仍具有访问令牌,并且已通过先前证书中的公钥对访问令牌进行了加密,并且IdentityServer将需要先前证书中的私钥对其进行解密。使用此方法,您只能添加先前的密钥,以用于验证材料IdentityServer无法使用当前密钥进行验证。

数据保护实际上是完全独立的。它使用公钥和私钥来完成其工作,因此从技术上讲,您也可以将相同的密钥用于IdentityServer。但是,最好将密钥限制为唯一的用途。这样,如果您确实受到损害,就不会完全受到损害,并且可能会在一定程度上限制潜在泄漏的范围。