layout: docs-default
密钥,签名和加密
IdentityServer在几个地方依赖于加密,下面是简单介绍:
加密传输(HTTPS)
IdentityServer默认要求所有请求都通过HTTPS,只通过安全传输机制和IdentityServer通信是强制要求。
当然在一些特定的场景,比如SSL被卸载, 可以稍微放宽点要求。请看部署 了解更多信息.
SSL/TLS是在托管程序里面配置的---比如IIS或者直接用HTTP.SYS.
令牌签名
身份令牌和JWT访问令牌通过RSA算法(RS256),使用X.509证书签名。签名证书在IdentityServerOptions
的SigningCertificate
属性设置。这个属性对于身份令牌和JWT访问令牌是必须设置的。
如果用的是参考令牌,可以不设置签名证书。
备注 密钥长度不能小于2048 字节.
签名密钥轮转
X.509证书是有生存期的,不停机更新和轮换签名密钥是一件苦难的事情。好消息是,IdentityServer有一些特性可以让它别的简单些。
- 发现文档会公布当前的公开密钥(和备用密钥). 令牌使用者可以从中了解密钥的一些信息。
- 所有的JWT令牌都包含一个密钥标识,这个标识和发现文档里的一一对应。
- 访问令牌验证中间件周期(每24小时)检查发现文档来更新密钥配置。
密钥轮换步骤基本如下:
- 拿到一个新的证书替换旧的。
- 在选项中把这个新的证书设置为
SecondarySigningCertificate
。 现在IdentityServer会把新旧两个证书都公布在发现文档中,访问令牌验证中间件可以处理被任一证书加密的令牌。 - 等待24小时,等所有的客户端都已经更新配置了。
- 把新的证书设置为主
SigningCertificate
. 移除旧的证书。
Cookie 保护
Cookies同样需要保护,IdentityServer使用Katana数据保护机制来实现它。如果IIS托管我们的应用。Katana会使用ASP.NET的机器密钥来保护所有的cookies。如果部署在web farm上,那么需要手动同步所有节点上的密钥。
如果是自托管,可以接入自定义的Katana数据保护插件或者使用IdentityServer的基于X.509证书的数据保护器。