JWT
常见的认证机制
1.HTTP Basic Auth
每次请求api的时候都提供用户的username和password
2.cookie auth
为一次请求认证在服务端创建一个session对象,同时在客户端的浏览器端创建了一个cookie对象,通过客户端带上来cookie对象来与服务器端的session对象匹配来实现状态管理。
3.oauth
允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源,而无需将用户名和密码提供给第三方应用
4.Token oauth
客户端使用用户名跟密码请求登录
服务端受到请求,去验证用户名与密码
验证成功后,服务端会签发一个token,再把这个token发送给客户端
客户端受到token以后可以把它存储起来
客户端每次向服务端请求资源的时候需要带着服务端签发的token
服务端收到请求,然后去验证客户端请求里面带着的token如果验证成功,就向客户端返回请求的数据
JWT优点:
1.jwt基于json,方便解析
2.可以在令牌中自定义丰富的内容,易扩展
3.安全性高
4.资源服务使用jwt可不依赖认证服务既可以完成授权
缺点:
令牌较长,占存储空间比较大
组成:
jwt实际上就是一个字符串,它由三部分组成,头部,载荷和签名
头部用于描述关于该jwt的最基本的信息。
负载:就是存放有效信息的地方。
有效信息包含三个部分
1.标准中注册的声明
2.公共的声明
3.私有的声明
签名:
创建签名需要使用编码后的header和payload以及一个密钥,使用header中指定签名算法进行签名
JWT的工作流程
1.用户携带username和password请登录
2.服务器验证登录验证,如果验证成功,根据用户的信息和服务器的规则生成JWT Token
3.服务器将该token返回
4.用户得到token,存在localStorage、cookie或其它数据存储形式中。
5.以后用户请求服务器时,在请求的header中加入 Authorization: Bearer xxxx(token) 。此处注意token之前有一个7字符长度的“Bearer “,服务器端对此token进行检验,如果合法就解析其中内容,根据其拥有的权限和业务逻辑反回响应结果。