目录
Please enable Javascript to view the contents

Postman Test 脚本解析 JWT 验证 Claim

 ·  ☕ 1 分钟

    重要

    Postman 的 Tests 模块可以解析 JWT Token,在 Console 中查看 payload 内容,并将 claim 值设为环境变量供后续请求使用。

    1.简介

    测试 OAuth2 / OpenID Connect 接口时,需要验证返回的 JWT 中是否包含预期的 claim(如 subissroles),以及将 access_token 自动传递给后续请求。

    2.说明

    2.1 请求 Token

    1
    2
    3
    4
    5
    6
    7
    
    curl -X POST 'https://sso.example.com/auth/realms/app/protocol/openid-connect/token' \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d 'grant_type=password' \
      -d 'username=user' \
      -d 'password=xxx' \
      -d 'client_id=<client-id>' \
      -d 'client_secret=<client-secret>'

    2.2 Tests 脚本

    在 Postman 请求的 Tests 标签中添加:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    let jsonData = pm.response.json();
    let jwtContents = jwt_decode(jsonData.access_token);
    
    pm.environment.set("accessToken", jsonData.access_token);
    pm.environment.set("userId", jwtContents.payload.sub);
    
    console.log("Token Contents:\n" + JSON.stringify(jwtContents, null, 2));
    
    function jwt_decode(jwt) {
        var parts = jwt.split('.'); // header, payload, signature
        return {
            header: JSON.parse(atob(parts[0])),
            payload: JSON.parse(atob(parts[1])),
            signature: atob(parts[2])
        };
    }
    方法作用
    pm.response.json()解析响应体为 JSON
    jwt.split('.')JWT 由三部分 base64 组成:header.payload.signature
    atob()浏览器内置方法,Base64 → 字符串
    pm.environment.set()设置 Postman 环境变量,后续请求通过 {{accessToken}} 引用

    2.3 调试

    脚本中的 console.log 输出到 Postman Console(ViewShow Postman ConsoleCtrl+Alt+C)。

    3.参考

    分享

    Hex
    作者
    Hex
    CloudNative Developer