jwt 是什么
jwt(Json web token)是json对象的编码表示,json对象由零个或多个名称/值对组成,其中名称是string,值为任意json值。
JWT有助于(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、不可修改的(即签名)和URL - safe(即Base64编码的)。
jwt 的组成
Header: 标题包含了令牌的元数据,包含签名、加密算法的类型
Claims: Claims包含您想要签署的任何信息
JSON Web Signature (JWS): 在header中指定的使用该算法的数字签名和声明
另一种说法:
Header 头部信息,主要声明了JWT的签名算法等信息
Payload 载荷信息,主要承载了各种声明并传递明文数据
Signature 签名,拥有该部分的JWT被称为JWS,也就是签了名的JWS,用于校验数据
Header:
{
"alg": "HS256",
"typ": "JWT"
}
Claims:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature:
base64UrlEncode(Header) + "." + base64UrlEncode(Claims),
加密生成的token:分三段,分别对应这三部分。header.payload.signature
如何保证jwt安全
JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。
-
JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。
-
JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。
-
JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。