image
用户向业务系统发出资源请求
业务系统自己验证用户的登录信息
业务系统进行自己的统计
业务系统添加上自己的APPKEY
访问数据服务
-
数据服务读自己的配置文件。从而判断APPKEY是否合法
这种模式简单容易实现,不过很快就遇到了问题。因为团队之间的某些关于人的问题,小飞团队希望能知道每个用户的访问情况。于是演变成了从用户通过AppKey访问平台,并由平台办法给用户APIKEY。用户每次根据APIKEY来访问接口。image 用户向业务系统发出请求
业务系统会根据自己的APPKEY以及用户的ID向服务系统发出申请APIKEY的请求
数据服务将生成的APIKEY写到Redis中,并记录一些必要的用户信息
数据服务将APIKEY通过业务系统直接返回到用户系统
用户获取到APIKEY
再次请求时,用户将APIKEY带到每个请求中
业务系统将APIKEY带到数据服务中发出请求
数据服务根据在Redis中找到APIKEY对应的信息
返回给用户数据
image
- 用户输入Name和Password发送到认证系统
- 认证系统进行用户的获取
- 认证系统将用户信息封装成JWT返回给用户
- 用户访问业务系统
- 业务系统解码JWT
- 业务系统将解码的用户信息中APIKEY拿出来
- 业务系统访问数据服务的时候带上APIKEY
HTTP协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们必须再次认证。JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。这里JWT的知识,还是可以去了解阮一峰老师的博客小飞的Web让公司看到了价值,兄弟团队要两个项目可以免登录相互跳转。这一下可费了劲了!在这时候小飞又学会一招,signature认证。
image
- 用户向认证服务请求私钥
- 认证系统通过x.509系统生成一对秘钥同时生成SSID记录到Redis中
- 用户获取到公钥之后对用户的密码和账号进行加密
- 用户用自己的SSID和密文,发给认证服务器
- 认证服务器通过x.509对秘钥进行解码获取到用户名和密码
- 认证服务器再通过用户名和密码进行用户的认证
image
单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的总结,无论多么复杂的流程与机制,只要系统有一条流程线就不会混乱。
- 用户访问系统,如果没有权限会302到页面
- 用户在SSO页面完成登录
- SSO后端将JWT以及状态码返回给页面
- SSO前端将JWT,302回业务系统的前端
- 业务系统获取到302访问后端
- 业务后端向SSO发出请求,带上JWT
- SSO向业务系统返回UserInfo的JSON格式
认证
- Appkey和ApiKey的应用
- Cookie和Session的应用
- jwt和session
登录
- 原理
- 单点登录
用户中心
- 脱敏
- 中台
- RBAC