博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JWT初识
阅读量:5764 次
发布时间:2019-06-18

本文共 1619 字,大约阅读时间需要 5 分钟。

hot3.png

JSON Web Token (JWT)

Abstract

JSON Web Token (JWT) is a compact, URL-safe means of representing

claims to be transferred between two parties. The claims in a JWT

are encoded as a JSON object that is used as the payload of a JSON

Web Signature (JWS) structure or as the plaintext of a JSON Web

Encryption (JWE) structure, enabling the claims to be digitally

signed or integrity protected with a Message Authentication Code

(MAC) and/or encrypted.

JWT example:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的构成:

第一部分:头部(header)

头部承载两部分信息:

  1. 声明类型
  2. 声明加密的算法

例如:

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

然后将头部进行base64加密,构成token的第一部分:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二部分:载荷(payload)

存放有效信息的地方,包括三个部分

  1. RFC7519标准中注册的声明
  2. 公共的声明
  3. 私有的声明

标准中注册的声明有:

  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.

私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

定义一个payload:

{  "sub": "1234567890",  "name": "John Doe",  "iat": 1516239022}

然后将其进行base64加密,得到Jwt的第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

第三部分:签证(signature)

签证信息有三部分组成:

  1. header(base64加密后)
  2. payload(base64加密后)
  3. secret

签证需要把base64加密后的header和base64加密后的payload使用.连接组成字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

密钥secret是保存在服务端的,服务端会根据这个密钥进行生成token和验证,所以需要保护好。

转载于:https://my.oschina.net/u/3672057/blog/1845824

你可能感兴趣的文章
普通项目经理和资深项目经理的7大差距
查看>>
对象继承其他对象的方法和属性
查看>>
带三角的面包屑导航栏(新增递增数字)
查看>>
分享一段微信摇一摇代码,有兴趣的可以试一试
查看>>
Swift入门篇-闭包和函数
查看>>
Elastic技术栈Beats日志收集工具filebeat的安装
查看>>
Web应用程序安全与风险
查看>>
codeforces 796D Police Stations
查看>>
codeforces 984 A. Game
查看>>
.NET 反编译调试神器:dnSpy了解一下
查看>>
CSS居中
查看>>
linux的基本java环境搭建
查看>>
AE 打开各种格式文件
查看>>
CentOS下Mysql简易操作
查看>>
One Person Game(概率+数学)
查看>>
CodeForces 258B Little Elephant and Elections :于1-m中找出七个数,使六个数里面的4和7个数比第七个数严格小:数位dp+dfs...
查看>>
MAP
查看>>
手把手教你测——上网快鸟
查看>>
Jquery easyui dialog组件, 默认不自动打开
查看>>
膨胀和腐蚀的性质
查看>>