Skoruba.IdentityServer4 相关
目的:重新梳理下,记录下来。
下面 身份认证、Token颁发服务器简称 “IDS”
1.认证,基于Cookie的认证方式
IdentityServer4采用Cookie认证方式
IdentityServer4基于Asp.net Core Cookie认证方案之上建立自己的cookie认证方案(默认Cookie认证方案、外部Cookie认证方案)
登录时,记住密码Cookie默认过期时间14天
2.非对称加密
IDS 通过保有私钥,公开公钥
通过私钥生成JWT的签名,通过公钥校验JWT的签名(Signature 部分是对前两部分Header、Payload的签名,防止数据篡改。)
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
自制证书地址 https://www.cnblogs.com/leon-ytparty/articles/10418980.html
地址 https://hexquote.com/creating-self-signing-certificates-for-identityserver/
Token(JWT)
IDS生成Token,其中的签名使用 “私钥生成” 加密 。
当某一个Client拿着 “私钥生成” 的Token访问 API资源时,API资源向 IDS 的公开文档(.well-known)获取 “ 公钥 ”(一般情况下,未重启情况下,只会获取一次),Api通过公钥校验Token中的签名(Token中Payload部分,也可以校验)。
3.登录流程
不选择 “记住我”
A.用户通过Client “重定向” 到IDS -> 用户输入账密(或第三方账密校验)-> 生成Cookie加入Response中响应给该Client的用户 -> 后续生成、返回Token
B.在浏览器上新开一个Tab。用户通过Client “重定向” 到IDS -> 校验附带在Request中的Cookie -> 校验成功,表示认证成功,不需要输入账密了 -> 后续生成、返回Token
关闭浏览器后Cookie失效。重新走A的流程。
选择 “记住我”
1.走A的流程,生成的Cookie默认有效期14天。
关闭浏览器后Cookie不失效。走B的流程。
这也就是为什么在同一个浏览器上开多个Client “重定向”到同一个IDS,不需要重新登录的原因。
本文作者:youliCC