JWT格式

作者: 新签名 | 来源:发表于2019-10-06 13:29 被阅读0次

概念

全称:JSON Web Token。 一种浏览器与服务器之间的一种身份认证机制。

特性

  • 安全:签名token,无法伪造。
  • 无状态:不依赖服务端,不用维持会话。

原理

采用原始的token机制,放在HTTP请求的header中,header格式:

Authorization: Bear <token>

其中token.分割的三部分组成:

header.payload.signature
header

该部分存放token的加密方式、类型等内容。

如:

{
    "alg":"HS256",
    "type":"JWT"
}
  • alg签名算法。如:HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384

HS开头的是HMAC-SHAX。是利用HAMC对SHA摘要算法进行加盐(秘钥)哈希。
其他三个均是利用非对称算法加密进行签名,再对结果进行摘要得出的结果。

JWS 算法名称 描述
HS256 HMAC256 HMAC with SHA-256
HS384 HMAC384 HMAC with SHA-384
HS512 HMAC512 HMAC with SHA-512
RS256 RSA256 RSASSA-PKCS1-v1_5 with SHA-256
RS384 RSA384 RSASSA-PKCS1-v1_5 with SHA-384
RS512 RSA512 RSASSA-PKCS1-v1_5 with SHA-512
ES256 ECDSA256 ECDSA with curve P-256 and SHA-256
ES384 ECDSA384 ECDSA with curve P-384 and SHA-384
ES512 ECDSA512 ECDSA with curve P-521 and SHA-512
PS256 RSAPSSSA256 RSAPSS with SHA-256
PS384 RSAPSSSA384 RSAPSS with SHA-384
  • type: 本次对话认证格式,如:JWT

通过对该json字符串进行BASE64压缩就得到了header部分。

payload

该部分是有关实体(通常是用户)的声明。
如:

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

对该json字符串进行BASE64压缩就得到了第二部分。从这里可以看出payload完全是明文暴露的,请不要放置一些重要信息。

声明主体信息格式有三种类型: registered, public, private

  • Registered claims: 预定义的声明,预定义声明的json内容应固定包含以下信息
  1. iss (issuer) 发行人信息,即整个token的发行者。
  2. exp (expiration time) token的过期时间(时间戳)。
  3. sub (subject) 当前主体信息,该值必须是全局唯一。
  4. aud (audience) 受众群体,即该token能被谁处理,用于多个token处理方的场景,若处理方只有一个,此值可以非必填。

请注意,声明的名称仅是三个字符,因为JWT是紧凑的。

如:

{
  "iss": "abc company",
  "exp": 1570336171902,
  "sub": "eb34cc5a-6d4a-401a-9e4e-eec216bb56a7"
}

如果存在token发行方和处理方不一致或有多个处理方的应用场景时,可以借鉴该声明。

  • Public claims:可以随意定义主体JSON的声明。但是为了避免歧义,还是推荐从这里找到已经定义好的声明。

  • Private claims: 纯私有声明,不存在任何约束。内容不是Registered claims或者Public claims中的元素, payload开始部分给出的例子应属于私有。

signature

该部分是签名,以token的前两部分作为明文,用共同协商好的秘钥进行签名。

如:用的第一部分选择的算法是HMAC-SHA256,执行以下操作得出签名值

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

若是非对称秘钥,比如:RSAPSS-SHA256,执行以下操作得出签名值

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), publicKey, privateKey)

相关文章

  • JWT Token

    JWT token的组成 头部(Header),格式如下:{“typ”: “JWT”,“alg”: “HS256”...

  • JWT格式

    概念 全称:JSON Web Token。 一种浏览器与服务器之间的一种身份认证机制。 特性 安全:签名token...

  • java-JWT

    什么是 JWT JWT 全称 JSON web Token,因此他的本质是一个token,只是它是具有统一格式和操...

  • JWT漏洞学习

    1、JWT简介 JWT(JSON Web Token)是一串json格式的字符串,由服务端用加密算法对信息签名来保...

  • 认证,令牌

    session方法; Token方法: base64url转码格式 使用jwt实现身份验证

  • jwt token机制

    jwt token机制 1、登陆时生成token,格式为 A.B.C如:eyJhbGciOiJIUzI1NiIsI...

  • IdentityServer4 第三部分 主题 第29章 保护A

    第29章 保护API IdentityServer 默认以JWT(JSON Web令牌)格式发出访问令牌。 今天的...

  • Token-JWT

    概况 JWT 全称:JSON Web Token,由三部分组成,头部、载荷与签名。 1、头部格式 {"typ": ...

  • springboot+shiro+jwt

    jwt简介 1.什么是JWTJWT(Json Web Token),是一种工具,格式为XXXX.XXXX.XXXX...

  • JsonWebToken

    JWT (JsonWebToken) JWT官网['https://jwt.io/'] JWT简介 1.JWT(J...

网友评论

      本文标题:JWT格式

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