比较主流的方案有几种:
- 用户名和密码鉴权,使用Session保存用户鉴权结果。---依赖session不适用移动应用
- 使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式)---对于非开放平台有些过于复杂
- 自行采用Token进行鉴权---JWT
JWT Json Web Token
JWT是基于RFC 7519标准定义的一种可以安全传输的小巧合自包含的JSON对象。由于数据使用数字签名的,所以是可信任和安全的。
JWT只不过提供了一种基于token的请求验证机制,用户权限,对于API的权限划分、资源的权限划分,用户的验证等等都不是JWT负责的,
工作流程
1 用户导航到登录页面,输入用户名,密码,进行登录
2 服务器验证登录鉴权,如果该用户合法,根据用户的信息和服务器的规则生成JWT Token
3 服务器将该token以json形式返回(不一定json的形式,只是常见的做法)
4 用户得到token,存在localStorage,cookie或其他数据存储形式中。
5 以后用户请求 、protected中的API时,在请求header中加入Authorization:Bearer xxx(token)。注意token之前有一个7字符长度的Bearer。
6 服务器端对此token进行检查,如果合法就解析其中内容,根据其拥有的权限和自己的业务逻辑给出对应的响应结果。
7 用户取得结果
单点登录:提升产品使用的便利性,分离了各个服务都需要的登录服务,对性能以及工作量都有好处。
JWT用途:3种web会话管理方式,JWT实现token-based会话管理。
BJWT SSO实现原理时序图,模拟了三个服务,分别是CAS、系统A、系统B、分别部署在cas、systemA.com、systemB.com;CAS这个服务用来管理SSO的会话;系统A和系统B分别代表业务系统。
场景一
关键点:
1 用到两个cookie(JWT和SID)、三次重定向来完成会话的创建和会话的传递;
2 JWT的cookie是写在systemA.com这个域下的,所以每次重定向到systemA.com的时候,jwt这个cookie只要有就会带过去;
3 验证jwt的时候,知道当前用户创建sso的会话,因为jwt的padload里面存储了之前创建sso会话的session id,所以当cas拿到jwt就相当于拿到了seesion id,然后这个session id 去判断有没有对应的session对象