JSON Web Token(JWT)

RPA 流程經常需要為其驅動的 API 簽發或驗證 bearer token,但框架過去只有 HMAC *檔案*簽章 (action_signing)以及綁定 ACME 的 RS256 JWS(acme_v2)—— 兩者都不會產生或驗證精簡的 bearer JWT。本功能補上一個聚焦、純標準函式庫的 JWT 編解碼器(HMAC 家族)並含完整的宣告驗證, 設計上可直接餵入 http_request 的 bearer 驗證。

純標準函式庫(hmac + hashlib + base64 + json);時鐘可注入,因此 exp / nbf 檢查具決定性。不匯入 PySide6

安全性

解碼器預設即安全:

  • 拒絕 ``alg: “none”`` 以及任何呼叫端未明確列入允許清單的演算法,藉此擊敗經典的演算法 混淆 / 降級攻擊;

  • ``hmac.compare_digest``(常數時間)比較簽章;

  • RSA/EC 演算法(RS256/ES256)刻意**不在範圍內** —— 它們需要第三方加密函式庫。

無頭 API

from je_auto_control import encode_jwt, decode_jwt, ClaimsPolicy

token = encode_jwt({"sub": "user1", "aud": "api", "exp": 1893456000}, secret)
# -> "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...."

# 預設政策:僅 HS256、驗證 exp/nbf、不檢查 audience/issuer
claims = decode_jwt(token, secret)

# 以 ClaimsPolicy 收緊 audience / issuer / leeway / algorithms
policy = ClaimsPolicy(algorithms=("HS256",), audience="api",
                      issuer="my-service", leeway=30)
claims = decode_jwt(token, secret, policy)

encode_jwtHS256 / HS384 / HS512 簽出精簡的 header.payload.signature token。decode_jwt 先驗證簽章,再以一份 ClaimsPolicy (含 leewayexp / nbfaud 成員資格、iss 比對)使用可注入的 now 驗證 標準宣告;失敗時拋出 ExpiredTokenError / InvalidSignatureError / JwtError。簽出的 token 可直接接上 HTTP 用戶端:

from je_auto_control import http_request
http_request("https://api.example.com/me",
             auth={"type": "bearer", "token": token})

執行器命令

AC_jwt_encode 接受 claims``(dict JSON 字串)、``key 與選用的 alg,回傳 {token}AC_jwt_decode 接受 tokenkey 與選用的 algorithms / audience / leeway,回傳 {ok, claims}``(或 ``{ok: false, error},讓流程可在不拋出 例外的情況下分支)。兩者皆以 MCP 工具 ac_jwt_encode / ac_jwt_decode 以及 Script Builder 中 Security 分類下的命令提供。