IdentityServer4 签名密钥、验证密钥和 .Net Core 数据保护
IdentityServer4 Signing Key, Validation Key and .Net Core Data Protection
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,也需要执行此操作吗?
- “你request/create新密钥material”指的是什么?这是新证书吗?或者这是 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 使用非对称加密。非对称加密意味着您有一个 public 密钥和一个私钥。 public 密钥是共享的(显然)并且仅用于加密。私钥是私人的。应严格保护,绝不共享,用于解密。签名密钥是您的 public 密钥,而验证密钥是您的私钥,所以是的,您需要两者。可以使用 X509Certicate,因为证书同时使用 public 和私钥,但最终,IdentityServer 只是使用证书来获取密钥。
AddValidationKeys
(复数)方法明确用于密钥翻转。例如,您的证书可能会在一年后过期(大多数情况下是默认设置)。在此期间结束时,您将用新证书替换它。但是,客户端可能仍然具有访问令牌,并且通过来自先前证书的 public 密钥进行了加密,而 IdentityServer 将需要来自先前证书的私钥来解密它。使用此方法,您可以仅出于验证目的添加以前的密钥material IdentityServer 无法使用当前密钥进行验证。
数据保护确实是完全独立的。它 也 使用 public 和私钥来完成它的工作,因此从技术上讲,您 可以 对 IdentityServer 使用相同的密钥.但是,最好将您的密钥限制在唯一用途上。这样,如果您确实受到威胁,您就不会 完全 受到威胁,并且可以在一定程度上限制潜在泄漏的范围。
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,也需要执行此操作吗?
- “你request/create新密钥material”指的是什么?这是新证书吗?或者这是 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 使用非对称加密。非对称加密意味着您有一个 public 密钥和一个私钥。 public 密钥是共享的(显然)并且仅用于加密。私钥是私人的。应严格保护,绝不共享,用于解密。签名密钥是您的 public 密钥,而验证密钥是您的私钥,所以是的,您需要两者。可以使用 X509Certicate,因为证书同时使用 public 和私钥,但最终,IdentityServer 只是使用证书来获取密钥。
AddValidationKeys
(复数)方法明确用于密钥翻转。例如,您的证书可能会在一年后过期(大多数情况下是默认设置)。在此期间结束时,您将用新证书替换它。但是,客户端可能仍然具有访问令牌,并且通过来自先前证书的 public 密钥进行了加密,而 IdentityServer 将需要来自先前证书的私钥来解密它。使用此方法,您可以仅出于验证目的添加以前的密钥material IdentityServer 无法使用当前密钥进行验证。
数据保护确实是完全独立的。它 也 使用 public 和私钥来完成它的工作,因此从技术上讲,您 可以 对 IdentityServer 使用相同的密钥.但是,最好将您的密钥限制在唯一用途上。这样,如果您确实受到威胁,您就不会 完全 受到威胁,并且可以在一定程度上限制潜在泄漏的范围。