【token】JWT详解1基本说明

举报
小雨青年 发表于 2022/03/28 22:26:18 2022/03/28
【摘要】 什么是JWT JWT全称JSON Web Token ,是基于RFC 7519的签名验证方法可以使用HMAC、RSA或ECDSA的公用/专用密钥对对JWT进行签名JWT可用于授权和信息交换 格式 J...

什么是JWT

  • JWT全称JSON Web Token ,是基于RFC 7519的签名验证方法
  • 可以使用HMAC、RSA或ECDSA的公用/专用密钥对对JWT进行签名
  • JWT可用于授权和信息交换

格式

JWT通过.进行分割,包括

  • Header
  • Payload
  • Signature

形式为 xxxxx.yyyyy.zzzzz

格式详解

Header

header的作用是声明使用jwt,并告知是用什么加密算法

{
  "alg": "HS256", //还可以是HMAC或者RSA
  "typ": "JWT"  //必定是JWT
}

  
 
  • 1
  • 2
  • 3
  • 4

然后通过base65url进行编码。

Payload

这部分是主要的数据,最后形如

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

和上面一样,也是base64Url编码的。

注意,JWT可以被校验不可更改,但是内容信息并不是加密的,所以不能传输机密信息

可以是以下三种类型

registered

这里内容不强制,推荐按下面的

 iss (issuer), exp (expiration time), sub (subject), aud (audience)

  
 
  • 1

注意的是,name必须是三个字符
可以参考 https://www.iana.org/assignments/jwt/jwt.xhtml ,这是规定好的可以直接拿来用,一般也就够用了

public

可以随意定义,如果上面的没有需要去注册

private claims

这种也是随意定义的,但是不需要去注册

Signature 签名

根据上面header声明的加密方式,对这3部分进行加密,比如使用HMAC SHA256,就这样加密字符

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

  
 
  • 1
  • 2
  • 3
  • 4

加密后范例

最终我们会得到如下的字符串

在这里插入图片描述

我们可以在 https://jwt.io/#debugger-io 去校验生成的JWT是否符合规范。

使用JWT

Header

Authorization: Bearer <token>

  
 
  • 1

总结

  • JWT作为常用的校验方式很值得学习
  • 加密字符中不能写入机密数据,因为JWT可以被解密看到,只是不能被篡改

参考资料

  • https://jwt.io/
  • https://tools.ietf.org/html/rfc7519#section-4.1
  • https://jwt.io/#debugger-io

文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。

原文链接:coderfix.blog.csdn.net/article/details/108766707

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。