pyg电商实战2

五、基于JWT的Token登录认证

1、JWT简介

JSON Web Token(缩写 JWT),是目前最流行的跨域认证解决方案。

session登录认证方案:用户从客户端传递用户名、密码等信息,服务端认证后将信息存储在session中,将session_id放到cookie中。

以后访问其他页面,自动从cookie中取到session_id,再从session中取认证信息。

另一类解决方案,将认证信息,返回给客户端,存储到客户端。下次访问其他页面,需要从客户端传递认证信息回服务端。

JWT就是这类方案的代表,将认证信息保存在客户端。

2、JWT 的原理

JWT 的原理是,服务器认证以后,生成一个 JSON格式的 对象,发回给客户端,就像下面这样。

{
  "用户名": "admin",
  "角色": "超级管理员",
  "到期时间": "2019-07-13 00:00:00"
}

以后,客户端与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。

为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。

服务器不再保存任何 session 数据,也就是服务器变成无状态了,从而比较容易实现扩展。

3、JWT 的数据结构

实际的 JWT是一个很长的字符串,中间用点(.)分隔成三个部分。 就像下面这样:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjNmMmc1N2E5MmFhIn0.eyJpYXQiOjE1NjI4MzM0MDgsImlzcyI6Imh0dHA6XC9cL3d3dy5weWcuY29tIiwiYXVkIjoiaHR0cDpcL1wvd3d3LnB5Zy5jb20iLCJuYmYiOjE1NjI4MzM0MDcsImV4cCI6MTU2MjkxOTgwOCwianRpIjoiM2YyZzU3YTkyYWEiLCJ1c2VyX2lkIjoxfQ.NFq1qQ-Z5c4pwit8ZkyWEwX6SBXmnHJcc6ZDgSD5nhU

JWT 的三个部分依次如下。

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

写成一行,就是下面的样子。

Header.Payload.Signature

3.1 Header

Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。

{
  "alg": "HS256",
  "typ": "JWT"
}

上面代码中,alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT

最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。

3.2 Payload

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。

名称 说明 解释
iss (issuer) 签发人 issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者
sub (Subject) 主题 设置主题,类似于发邮件时的主题
aud (audience) 受众 接收jwt的一方,接收人
exp (expire) 过期时间 token过期时间,时间戳
nbf (not before) 生效时间 当前时间在nbf设定时间之前,该token无法使用
iat (issued at) 签发时间 token创建时间
jti (JWT ID) 编号 对当前token设置唯一标示

除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。

{
  "sub": "除了帅一无所有",
  "na
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值