栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JWT(JSON Web Token)简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JWT(JSON Web Token)简介

注:本文大体上是对JWT官方文档介绍(https://jwt.io/introduction)的简化翻译,并加入了一些自己的理解。

JWT的定义

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a
compact and self-contained way for securely transmitting information
between parties as a JSON object. This information can be verified and
trusted because it is digitally signed. JWTs can be signed using a
secret (with the HMAC algorithm) or a public/private key pair using
RSA or ECDSA.

应用场景

授权(Authorization):这是JWT最常用的场景。当用户成功登录(log in)之后,后续的每个request里都包含JWT token,以便访问server所提供的服务,资源等。交换信息:JWT本身是一种安全传输信息的方式,因为JWT包含了数字签名。此外,由于JWT是用其本身的header和payload来签名的,这就保证了这些内容不会被篡改。 JWT的结构

JWT token一般由3部分组成,各个部分之间以 . 分隔:

HeaderPayloadSignature

例如: xxxxx.yyyyy.zzzzz

Header

Header通常由类型( typ )和算法( alg )2部分组成,例如:

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

该JSON数据经过 base64Url 编码后,组成了JWT的 Header 。

Payload

Payload由一些声明( claim )组成。这些声明包括:

Registered claims:例如 iss (issuer), exp (expiration time), sub (subject)等Public claimsPrivate claims

例如:

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

该JSON数据经过 base64Url 编码后,组成了JWT的 Payload 。

注:尽管这些信息有数字签名以确保其不会被篡改,但它们可能会被任何人读取(注意encoding并不是加密)。因此,不要在Header和Payload里放置任何敏感数据(除非经过加密,比如https)。

Signature

也就是把 . ,和一个 secret ,以Header中所指定的算法,生成数字签名。例如:

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

如上文所述,该数字签名一来用来验证身份,二来可确保Header和Payload没有被篡改。

最终生成的JWT token,是一个由2个 . 所分隔的base64-URL字符串,例如:

JWT的使用

当用户使用credentials成功登录之后,server会生成JWT token并返回给用户。用户后续的request里会包含该JWT token,通常是放在HTTP request的 Authorization Header里面,并冠以 Bearer schema,例如:

Authorization: Bearer 

Server收到request后,会去检查并验证该JWT token,如果验证成功,就会允许request访问所请求的资源。此外,由于JWT本身可以包含一些信息,这就有可能减少一些DB的查询(比如上面例子中的 name 和 admin 身份的信息)。

试一试

有一些在线网站,可以验证和decode JWT token。比如JWT官网:

https://jwt.io/#debugger-io

参考

https://jwt.io/introductionhttps://www.bezkoder.com/jwt-json-web-token/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号