【微服务】JWT令牌原理

什么是JWT

JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于在通信双方传递JSON对象,传递的信息经过数字签名可以被验证和信任。
JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。

JWT令牌示例

在这里插入图片描述

JWT令牌结构

在这里插入图片描述

Header

头部包括令牌的类型(即JWT)及使用的哈希算法。

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

将上边的内容使用base64UrlEncode编码,得到一个字符串就是JWT令牌的第一部分。

String s = "{\"typ\":\"JWT\",\"alg\":\"HS512\"}";
String encodeToString = Base64.getEncoder().encodeToString(s.getBytes());
System.out.println(encodeToString);

Payload

第二部分是负载,内容也是一个JSON对象,它是存放有效信息的地方,它可以存放JWT提供的现成字段,比 如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可自定义字段。
此部分不建议存放敏感信息,因为可以解码还原原始内容。

{
  "userInfo": "4028d08181d93e1f0181d93e587e0000",
  "exp": 1657421554
}

Signature

第三部分是签名,此部分用于防止JWT内容被篡改。 这个部分使用base64UrlEncode将前两部分进行编码,编码后使用点(.)连接组成字符串,最后使用header中声明 签名算法进行签名。

HMACSHA512(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload), 
  your-secret
)
  • base64UrlEncode(header):JWT令牌的第一部分。
  • base64UrlEncode(payload):JWT令牌的第二部分。
  • your-secret:签名所使用的密钥。
    JWT三个部分只有第三部分是加密的,通过数字签名机制,我们既可以保证数据完整性,也可以对数据来源进行身份验证。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值