最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JWT原理和简单应用的介绍(附代码)

来源:动视网 责编:小采 时间:2020-11-27 14:20:22
文档

JWT原理和简单应用的介绍(附代码)

JWT原理和简单应用的介绍(附代码):本篇文章给大家带来的内容是关于JWT原理和简单应用的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。JWT认证登录最近在做一个审核系统,后台登录用到JWT登录认证,在此主要做个总结JWT是什么Json web token (JWT
推荐度:
导读JWT原理和简单应用的介绍(附代码):本篇文章给大家带来的内容是关于JWT原理和简单应用的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。JWT认证登录最近在做一个审核系统,后台登录用到JWT登录认证,在此主要做个总结JWT是什么Json web token (JWT


本篇文章给大家带来的内容是关于JWT原理和简单应用的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

JWT认证登录

最近在做一个审核系统,后台登录用到JWT登录认证,在此主要做个总结

JWT是什么

Json web token (JWT), 根据官网的定义,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

为什么使用JWT

此处主要和传统的session作对比,传统的session在服务器端需要保存一些登录信息,通常是在内存中,在后端服务器是集群等分布式的情况下,其他主机没有保存这些信息,所以都需要通过一个固定的主机进行验证,如果用户量大,在认证这个点上容易形成瓶颈,是应用不易拓展。

JWT原理

JWT由三个部分组成,用点号分割,看起来像是这样,JWT token本身没有空格换行等,下面是为了美观处理了下

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19.
m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
1.头部(Header)

Header部分是一个json,描述JWT的元数据,通常是下面这样

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

alg表示签名使用的的算法,默认是HMAC SHA256,写成HS256, tye表示这个token的类型,JWT token统一使用JWT,上面这段Header生成的token是

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
2.负载(Payload)

官方规定了7个字段,解释如下

  • iss: 签发人,可以填写生成这个token的ID等等,可选参数
  • sub: 该JWT所面向的客户,可以存储用户的account_id等等,可选
  • aud:该JWTtoken的接收方,可以填写生成这个token的接口URL,但是不强制,可选
  • exp: 过期时间,时间戳,整数,可选参数
  • iat:生成token的时间,unix时间,时间戳,可选参数
  • nbf(Not Before): 表示该token在此时间前不可用,验证不通过的意思,可选
  • jti: JWT ID,主要用来生成一次性token,可选的参数
  • 除了官方之外,我们还可以定义一部分自定义字段,但是考虑到BASE是可逆的,所以不要放入敏感信息
    下面是一个例子;

    {
     "iss": "labs_purifier-api-panel",
     "iat": 1552975878,
     "exp": 1555567878,
     "aud": "http://ff-labs_purifier-api-test.fenda.io/prod/v1/auth/jwt",
     "sub": "1501385611884704",
     "scopes": [
     "register",
     "open",
     "login",
     "panel"
     ]
    }

    上面这个Payload,经过BASE加密后,生成的token是

    eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19
    3.签名(Signature)

    Signature是对前面两部分生成的两段token的加密,使用的加密方式是Header里面指定的,此处是HS256,此时,需要一个秘钥,不可以泄露,大致过程如下:

    HMACSHA256(
     baseUrlEncode(header) + "." +
     baseUrlEncode(payload),
     secret)

    JWT的使用

    JWT token 一般放在请求头里面,当然也可以放在cookie里面,但是放在cookie里面不可以跨域,例如:

    Authorization: Bearer <token>

    JWT在Python中的简单生成和验证

    jwt库

    生成token

    def create_token():
     payload={
     "iss": "labs_purifier-api-panel",
     "iat": 1552975878,
     "exp": 1555567878,
     "aud": Config.AUDIENCE,
     "sub": "1501385611884704",
     "scopes": [
     "register",
     "open",
     "login",
     "panel"
     ]
     }
     token = jwt.encode(payload, Config.SECRET_KEY, algorithm='HS256')
     return True, {'access_token': token}

    验证token

    def verify_jwt_token(token):
     try:
     payload = jwt.decode(token, Config.SECRET_KEY,
     audience=Config.AUDIENCE,
     algorithms=['HS256'])
     except (ExpiredSignatureError, DecodeError):
     return False, token
     if payload:
     return True, jwt_model

    需要注意的是,如果在生成的时候,加上了aud参数,验证的时候也要用上audience参数,并且值必须一样

    本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!

    文档

    JWT原理和简单应用的介绍(附代码)

    JWT原理和简单应用的介绍(附代码):本篇文章给大家带来的内容是关于JWT原理和简单应用的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。JWT认证登录最近在做一个审核系统,后台登录用到JWT登录认证,在此主要做个总结JWT是什么Json web token (JWT
    推荐度:
    标签: 使用 原理 介绍
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top