Advertisement

一文理解 JWT、JWS、JWE、JWA、JWK、JOSE

阅读量:

原文收录

该平台采用统一界面管理方案进行统一接口认证服务

JsonWebToken

关于JsonWebToken的专业名词解释:

  • unsecured JWT: default headers set to { "alg": "none" } for unsigned JWT tokens
    • JWS (SignedJWT): signed JWT comprising standard JWT structures with header fields, payloads, and signatures
    • JWE (EncryptedJWT): encrypted JWT consisting of:
      • JWA: cryptographic algorithms involved in the process
      • JWK: cryptographic algorithm keys stored in a public key store

JsonWebToken主体分为三个部分:header、payload、signature

unsecured JWT结果示例:

复制代码
    eyJhbGciOiJub25lIn0.
    eyJqdGkiOiJkZWJhNzhiZDZiNTI0ZTA2OWE4MmZjZTJlNzdmOTU2MSIsImlzcyI6Ik1hdGVNYXN0ZXIiLCJzdWIiOiLmnInmlYjotJ_ovb3mtYvor5UiLCJhdWQiOiJhdWRpZW5jZSIsImV4cCI6MTY3MDExNzIzMywibmJmIjoxNjcwMDMwODkzLCJpYXQiOjE2NzAwMzA4MzN9.
  • header
复制代码
    {
    "alg": "HS256",
    "typ": "JWT",
    "cty": ""
    }
在这里插入图片描述
  • payload 有效负载通常划分为两种类型:一种是由用户自定义的参数配置来实现;另一种是系统预设的标准注册参数(iss sub aud exp nbf iat jti),其中 iss 表示标识符;sub 表示子对象;aud 表示审计日志;exp 表示事件日志;nbf 表示名称前缀过滤器;iat 表示插入时间戳;jti 表示创建时间戳)
在这里插入图片描述
复制代码
    {
      "jti": "4a9813f957b84dda8091510402e7c33d",
      "iss": "MateMaster",
      "sub": "有效负载测试",
      "aud": "audience",
      "exp": 1670054958,
      "nbf": 1669968618,
      "iat": 1669968558
    }

JWS

JWS(Signed JWT)compact序列化主要生成流程:

在这里插入图片描述

结果示例

复制代码
    eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.
    eyJpc3MiOiJtYXRlbWFzdGVyIiwic3ViIjoiandzIiwiYXVkIjoiYXVkaWVuY2UiLCJleHAiOjE2NzAwMzQ4NjEsImlhdCI6MTY3MDAzNDgwMSwibmJmIjoxNjcwMDM0ODAxLCJqdGkiOiIzNTA3M2FhYmMxMmU0ZDUzOTBkNGNjOGFlYzVhNmVlYyJ9.
    pKhj-QPDszduhet_SZW6BfsLX0n88D__YvIHvfj87OSitCRq1ybb7Bc3ClZZfhf_ewgrhVUL4d4WK0JuCkl0gA

难点:

  • 概述JWS JSONSerialization的基本概念
  • 详细阐述JWS中header claims各组件(非标准jwt相关的组件)的功能及其应用

JWS JSON序列化
JWS JSON 序列化形式(多个签名)

复制代码
    {
    "payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ",
    "signatures": [
        {
            "protected": "eyJhbGciOiJSUzI1NiJ9",
            "header": {
                "kid": "2010-12-29"
            },
            "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AA uHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAyn RFdiuB--f_nZLgrnbyTyWzO5vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB _eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6 IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlU PQGe77Rw"
        },
        {
            "protected": "eyJhbGciOiJFUzI1NiJ9",
            "header": {
                "kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"
            },
            "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDx w5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"
        }
    ]
    }

扁平化JWS JSON 序列化形式(单个签名)

复制代码
    {
    "payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQog Imh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ",
    "protected": "eyJhbGciOiJFUzI1NiJ9",
    "header": {
        "kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"
    },
    "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFC gfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"
    }

JSON 序列化与 compact序列化的区别:

  1. Json序列化的结果呈现为标准JSON格式的对象结构包括payload、signatures字段;而compact序列化的结果形式则直接采用header.payload.signature的方式进行表示。
  2. json序列化功能可采用两种不同的header类型:protected或unprotected;其中protected标识表示该header字段是否经过签名验证的过程。
  3. json序列化功能允许同时配置多个签名策略,并将每个策略的具体内容存储于signatures数组中。

JWS JSON字段含义如下:

  • payload:携带JSON Web Token(JWT)负载的部分
  • protected:携带受过密保护的安全头信息
  • signatures:
    • 在未受过密保护的安全头字段中必填
    • 在可选的安全头字段中可选
    • 是Base64编码的安全签名串集合
  • header:
    • 在未受过密保护的安全头字段中必填
    • 在可选的安全头字段中可选
    • 包含未受过密保护的安全头信息
在这里插入图片描述

重点知识: 在JWS机制下,“共享密钥”使得各方能够验证并生成相应的凭证。就公私钥体系而言,在私钥端不仅可以进行凭证的认证还可以自主生成凭证,在公钥端则仅限于对凭证的认证能力。从生产者与消费者两个维度来理解JWS的工作原理及其应用机制。

在这里插入图片描述
在这里插入图片描述

JWE

JWE(Encrypted JWT)compact序列化主要生成流程:

  1. 基于 alg 算法定义所需的随机数。
  2. 按照密钥管理策略确定 CEK。
  3. 遵循密钥管理策略选择 JWE Encrypt Key。
  4. 若需则计算初始化向量。
  5. 若需则进行文本压缩。
  6. 采用 CEK、IV 或 AAD 进行数据加密。

JWE(Encrypted JWT)compact序列化组成部分:

Base64-encoding(header)

Base64-encoding(encryptedKey)[steps two and three]

Base64-encoding(initializationVector)[step four]

Base64-encoding(cipherText)[step six]

Base64-encoding(identifier)[step six]

复制代码
    eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.
    Y2DxdVnvuDwo5vutvvPg4PpGQKFmRxWoDUCtfs58Gv5rJ4J1RkSOUQ.
    -Iu2VusgO_w0uWrn0JWx3Q.
    krW8miBqh5x3dZ6ktf0C_A.
    HHYK0TxHth2949NDPpwTsw

重点知识:
在JWE体系中采用共享秘密密钥方案,在这种情况下任何一方均可进行加解密操作。对于对称加密算法仅允许使用公钥进行数据加密,在接收端则由私有秘钥负责数据解密过程。
从生产者与消费者两个视角解析JWE机制

在这里插入图片描述

JWK

JWK的出现旨在,为不同加密密钥提供一个统一的格式标准
JWK样例

复制代码
    {
    "kty": "EC",
    "crv": "P-256",
    "x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
    "y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
    "d": "870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
    "use": "enc",
    "kid": "1"
    }

持续更新中…………

全部评论 (0)

还没有任何评论哟~