美文网首页
jwt身份认证

jwt身份认证

作者: wuqingfeng | 来源:发表于2022-10-25 19:30 被阅读0次

JWT(JSON Web Tokens) 是一个开放的标准(RFC 7519)定义的一种简洁的、自包含的方法,用于通信双方之间以 Json 对象的形式安全的传递信息。

1 JWT结构

JWT由header、payload、signature三部分组成。


850498-20200320133305475-1970269555.jpg

对它们更详细的描述如下:

1.1 header

jwt 的头部承载两部分信息:

  • 声明类型,固定为 jwt
  • 声明签名算法,通常为 HMAC SHA256
    完整的头部就像下面这样的JSON:
{
    "typ": "JWT",
    "alg": "HS256"
}

然后将头部进行 base64 编码,构成了第一部分。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

1.2 payload

有效载荷就是存放有效信息的地方,这些有效信息包含三个部分:

  • 标准中注册的声明(Reserved claims)
    这些 claim 是 JWT 预先定义的,在 JWT 中并不会强制使用它们,而是推荐使用
iss:jwt签发者
sub:jwt所面向的用户
aud:接收 jwt 的一方
exp:jwt的过期时间,这个过期时间必须要大于签发时间
nbf:定义在什么时间之前,该jwt都是不可用的.
iat:jwt 的签发时间
jti:jwt 的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
  • 公共的声明
    公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息。但不建议添加敏感信息,因为该部分在客户端可解密。
  • 私有的声明
    私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为 base64 是编码方式,有对应的解码方式,意味着该部分信息可以归类为明文信息。
    定义一个 payload:
{
    "sub": "1234567890",
    "name": "John Doe",
    "admin": true
}

然后将其进行 base64 编码,得到 Jwt 的第二部分:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

1.3 signature

创建签名需要使用编码后的 header 和 payload 以及一个秘钥,使用 header 中指定签名算法进行签名。例如如果希望使用 HMAC SHA256 算法,那么签名应该使用下列方式创建:

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

secret 是保存在服务器端的,jwt 的签发生成也是在服务器端的,secret 就是用来进行 jwt 的签发和 jwt 的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个 secret, 那就意味着客户端是可以自我签发和验证 jwt 了。
碰到 JWT token 可以去 JWT 官网解密看看,下面这是官网解密出来的数据,可以很清楚的看到它的三部分内容:

碰到 JWT token 可以去 JWT 官网解密看看,下面这是官网解密出来的数据,可以很清楚的看到它的三部分内容:


image.png

2. JWT使用

JWT在实际应用流程如下:


850498-20200320133306091-1592499456.jpg

其中,因为JWT加密算法如HMAC为信息摘要算法,所以第5步check jwt signature的过程应当为重新计算signature并比对的过程。

相关文章

  • .NET Core5.0 JWT鉴权SSO单点登录

    JWT JWT全称“JSON Web Token”,是基于JSON的用户身份认证的令牌。可跨域身份认证,所以JWT...

  • jwt身份认证

    JWT(JSON Web Tokens) 是一个开放的标准(RFC 7519)定义的一种简洁的、自包含的方法,用于...

  • JWT Authentication in Django

    Django中的JWT认证 本教程将介绍JSONWeb令牌(JWT)以及如何在Django中实现JWT身份验证。 ...

  • JWT

    JWT | 简介 全称:JSON Web Token; JWT 主要用于身份认证和信息加密; JWT 是一个简单而...

  • hapi-auth-jwt 认证插件配置

    hapi JSON Web令牌(JWT)认证插件 JSON Web令牌身份验证需要验证签名的令牌。 'jwt'方案...

  • JeeSite4+jwt集成

    jeesite4+jwt集成 源码+资源领取QQ3211247533 1、 追加JWT 跨域身份认证公共类 2、添...

  • 【javaweb】JWT的常用方法

    github.java-jwt基于JWT的token身份认证方案 1、maven库 2、设置算法 3、创建并签名t...

  • 一次测试的全过程

    本文章转载于搜狗测试 身份认证 不要使用Basic Auth使用标准的认证协议 (比如 JWT, OAuth). ...

  • golang jwt加密

    JWT(json web token)的授权方式 jwt是JSON风格轻量级的授权和身份认证规范,可实现无状态、分...

  • node.js使用JWT登录

    一、什么是JWT JWT全称是jsonwebtoken,JWT的声明一般被用来在身份提供者和服务提供者间传递被认证...

网友评论

      本文标题:jwt身份认证

      本文链接:https://www.haomeiwen.com/subject/ghjozrtx.html