← 返回 CaseShift
教學

Bearer token 點樣解碼:唔洩露 token 睇 aud、exp、scope

# Bearer token 點樣解碼:唔洩露 token 睇 aud、exp、scope

**Slug:** `decode-bearer-token-claims`
**Date:** 2026-11-02
**CTA:** https://toolbookly.com/zh/jwtly

---

你喺 DevTools、Postman 或者 log 抄咗段 `Authorization: Bearer eyJhbGciOi…`,想知入面寫咗乜:俾邊個 API 用(`aud`)、邊個發出(`iss`)、邊個用戶(`sub`)、有咩權限(`scope`)、幾時過期(`exp`)。搜「bearer token decode」或者「hs256 decode」會見到一大堆貼上框。呢篇講清楚 bearer token 其實係乜、點樣睇 claims,同埋點解應該喺自己部機做——**唔上傳、唔中轉**。

Bearer token 係咪 JWT?

「Bearer」係 HTTP 認證**方式**,唔係 token 格式。意思係「邊個攞住呢段字串就有權限」,唔使額外證明。`Bearer ` 後面嗰段可以係:

  • **JWT**(OAuth 2.0/OpenID Connect、Auth0、Cognito、Firebase、Supabase、Keycloak、Azure AD 最常見)。樣子係三段 base64url 用點分隔:`xxxxx.yyyyy.zzzzz`,通常以 `eyJ` 開頭。

  • **Opaque token**——冇點嘅隨機字串(例如好多 GitHub、Stripe、Slack token)。呢類解碼唔到,只有發出者先查到。
  • 快速判斷:如果有啱啱兩個點、以 `eyJ` 開頭,九成係 JWT,可以直接睇。

    入面有乜:header、payload、signature

    JWT 係 `header.payload.signature`:

  • **Header**——JSON,有 `alg`(例如 `HS256`、`RS256`、`ES256`),通常仲有 `typ` 同 `kid`

  • **Payload**——JSON,裝住 claims

  • **Signature**——證明頭兩段冇被改過;但**唔會**隱藏內容
  • Header 同 payload 只係 base64url 編碼,冇加密。任何人攞到 token 都睇得到。所以「解碼」唔使 key——亦因為咁,token 本身先係要保護嘅秘密。

    你通常要睇嘅 claims

  • `iss`:發出者——係咪你預期嗰個身份提供者?

  • `sub`:主體(用戶或 client ID)——係咪你以為嗰個帳戶?

  • `aud`:受眾——同你個 API 夾唔夾?`aud` 錯係 401 經典原因

  • `exp`:過期時間(Unix 秒)——係咪已經過咗?兩部機時鐘有冇偏差?

  • `iat`/`nbf`:發出時間/生效時間——`nbf` 喺未來會令新 token 睇落「無效」

  • `scope`/`scp`/`roles`:權限——你個 endpoint 要嘅 scope 有冇喺入面?

  • `azp`/`client_id`:授權方——邊個 app 申請呢個 token?
  • 大部分「token 被拒」嘅 bug 都係 `aud`、`exp`/`nbf` 或者漏咗 scope。睇一睇 payload 幾秒就搵到答案。

    解碼唔等於驗簽(HS256 vs RS256)

    解碼令你**睇到** claims;**驗簽**先係檢查簽名:

  • **HS256/HS384/HS512** 用共用密鑰。要有嗰條密鑰先驗到——而 production 密鑰絕對唔好貼去你控制唔到嘅網站。

  • **RS256/ES256** 等用公鑰,通常喺發出者嘅 JWKS endpoint 公開。用 PEM 公鑰喺本機驗簽係安全嘅。
  • 未喺你伺服器程式碼驗證過嘅 token,claims 唔好信。解碼係用嚟 debug,唔係用嚟做授權。

    點解將 bearer token 貼上網有風險

    Bearer token **本身就係**憑證。未到 `exp` 之前,任何人見到都可以用嗰個用戶身份 call API。如果你貼去會將文字送上伺服器嘅 decoder,token 可能落入 request log、analytics、錯誤追蹤,或者「最近用過嘅 token」紀錄。有啲工具仲會將 token 放入網址,結果洩露落瀏覽器記錄同分享連結。Access token 好多時有效一個鐘或以上,refresh token 仲長好多。

    喺任何地方解碼之前嘅清單:

  • 優先用**喺瀏覽器解碼**、斷網都用得嘅工具

  • 確保 token 唔會放入網址(query 或 hash)

  • 唔好將 HS* production 密鑰貼去第三方網站

  • 如果有效 token 已經貼咗去唔信得過嘅地方,revoke 佢或者重設 session
  • 用 Jwtly 喺本機解碼 bearer token

    Jwtly 係 ToolBookly 嘅 JWT 解碼器。成段 header 值貼上——`Bearer eyJ…` 甚至 `Authorization: Bearer eyJ…` 都得——Jwtly 會自動去走前綴,將 header 同 payload 解碼做 pretty JSON。`exp`、`iat`、`nbf` 顯示本機時間,並標示已過期/未生效。可選驗簽只用瀏覽器嘅 Web Crypto API:HS256–512 用共用密鑰,RS256–512 同 ES256–512 用 PEM 公鑰。**唔上傳、唔中轉**:token、密鑰同公鑰都唔會離開你部機,亦唔會寫入網址。

    **Debug 401 嘅典型流程:**

  • 喺 DevTools → Network 抄 `Authorization` header 值

  • 貼入 Jwtly

  • 對 `aud` 同你個 API 識別碼,對 `exp`/`nbf` 同而家時間

  • 確認要用嘅 `scope` 或者角色喺 payload 入面

  • 有需要就用發出者嘅公鑰驗簽
  • 英文介面:Jwtly

    命令列做法

    鍾意用 terminal 都得,payload 只係 base64url。例如:

    ```text
    echo "$TOKEN" | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null
    ```

    可能要補 `=` padding,`base64 -d` 先肯接受。咁做都係留喺你部機——不過記住 token 可能會留喺 shell history。

    相關私隱優先流程

  • 想了解風險?睇 JWT 解碼唔離機:點解 token 唔應該貼上別人網站。

  • Payload 好大好多層?用 JSONly 本地格式化同瀏覽。

  • 想自己換算 `exp`?Epochly 喺瀏覽器將 Unix 時間戳轉做日期。
  • 結語

    Bearer token 就係一個有到期日嘅密碼。Debug 認證時睇 `aud`、`exp` 同 `scope`——但要用喺你部機運行嘅 decoder,唔好用會將 token 送上伺服器嗰啲。

    用 Jwtly 喺瀏覽器私隱咁解碼 bearer token(唔中轉)→