Skip to content

動態請求簽名

所有 API 請求須包含 JWT 令牌

請使用 Bearer schema 格式,在 HTTP request header 的 Authorization 標頭中傳遞 JWT 令牌。

Authorization: Bearer <JWT令牌>

參考連結:

JWT header 是 JWT 令牌的一個部分,該部分是一個 JSON 對象,其中包含描述該 JWT 的元數據。JWT headers 通過 Base64 編碼並放置在 JWT 令牌的開頭。

JWT headers 包括以下字段:

範例:

{
"alg": "EdDSA",
"kid": "ba240452-7fa7-49e9-884b-58b90b9c544e"
}

JWT payload 是 JWT 令牌的另一個部分,該部分也是一個 JSON 對象,包含聲明和元數據。JWT payload 通過 Base64 編碼並放置在 JWT headers 和 JWT signature 之間。

claims說明
iat簽發時間戳,指定 JWT 的發行時間,以 Unix 時間表示
aud請求目標,固定為 public-api-v2
jti用於防止重放攻擊,一個短時間內不會重複的字符串,推薦使用 UUIDv4
path請求路徑,如/api/v2/example
method請求方法(大寫),如 POST
bodyHash請求 body 的 sha256 hash 值,如果是 GET 請求,則不會驗證此 claim

假定請求的 body 為{"foo":"bar"},則 bodyHash 的值為7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b

範例:

{
"iat": 1672502400,
"aud": "public-api-v2",
"jti": "6e014086-835b-42d5-93a7-a85373b26ed6",
"path": "/api/v2/example",
"method": "POST",
"bodyHash": "7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b"
}

JWT signature 部分是由前兩個部分 headerpayload 結合起來,再用私鑰進行簽名後得到的。

最終的 JWT 令牌由三部分組成,每一部分都經過 Base64 編碼並用 . 分隔,使用在後台訪問令牌頁面選擇的算法加密。格式如下

Authorization: Bearer 簽名算法(base64(Jwt_header) + "." + base64(Jwt_payload) + "." + base64(Jwt_signature))

產生令牌後放入請求的 header 即可

POST /api/endpoint HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.uDmtOGz4_rQJHZTp7aeIzpgymLe0P6E9oU_JKo2-LUk // [!code focus]
Content-Type: application/json
{
"some": "data"
}
{
"alg": "RS256",
"typ": "JWT",
"kid": "afe62597-4cd8-4ad2-a012-deb2327e5712"
}
{
"aud": "public-api-v2",
"iat": 1516239022,
"jti": "29167995-3483-458d-82d0-842a867e2ec6"
}
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDYBGOsxouAtAb
s59BNN3WZUSWCCq2BamW0MJpydbX3Wgcf7NUcopwkYNpEZ9QzInnKO6LoCF3dSsL
ge3ss+I4/oI4Jlnv2Np1B1rqPbLIOjcIee2jO9JOhpRTJGE4G5YcQ4l557mwk/bW
51LK9MSgH1PBfNTbk542FSyQGEXW5XfJsRgWTesk93zLsTgskDkfzzMU6NLWSjeD
v3xOJPQBogBeF8Yjf8qngYzLFVQgB0LWCT9CSl0zVy2FpTOcuM9gtgHwsfRay1fx
C7T0eAuQsGagS40rg3r51J1F5Wo/xd6JHRaAGfGqTQrPUnOzmg7SNjHql0ZamIy3
a3Ui2WHpAgMBAAECggEAC4uDvhZLTRNmz3GVJDnxhJfGA8TxG9cd0bGoVgP9VBLb
R26BtFMdvHp8yhqmer8mGajLin395vHfh0s4OgKEiFr8auupPjO8RP9tmeXnc07Y
AwI2zqyG8uj09CzJfz1HaN18zt1TQGHzS3kD5XECpXZJxryPqiIA+VqASvYu5PyJ
HGzAlebPxXxX22tjJaUwpd8a656g/LGFdmDhEIp4I/PynJuJ6YbPsOrnMUi+NFGs
JSU1ddDAPe7v4+17Dm+H/MFgr2+of6pf5Q7dL7miDDDynz8Ot8fOuRA2FYZx6k9J
o0Bm1urzFnnBqI6hIXbq6dD8WJ8FY0HVCZThtgohuQKBgQDMm9qsN1PY9ui8C4I1
d6qxwtWVp8SfIAyEfIzNwy+vJlo/0qOpIAIwUtK0EuQ6WURDA7xyDa5D3AN8S8WR
2QVJFhHHtqgTOMoZv82d9+FhkPAWiXMWSAL19k/+9FYTkvdtte49zQ0mhq5Wqiel
i4DKDiqs5bmLNHk85WNZ24AydwKBgQD0coHI/aUgZQyBN9adGiVpBGld9lwWDcYK
St3Apk/f/14O3RrAACM5Tr0HmNzUVzrWeWkN4D8nC6tySBsEQ/LppkKP7qguebvR
gqIF+x/HiYjzqZ5Lg067VocCrrAehkxZ1DzxVdAQuAjQdg9Tl8/S4rlc/FvE9UG1
7JxnPN7GnwKBgQC++MUMMoPXIPWu9grtPqkaS2Cw0yro3q/wRJPjRUfPcbuQkFji
9RY15kf1fSB5+XGGHwmXZn99pO+35r0b2PRe9/NWdXzAnCO+DtCqnX9GYlJEpru9
Uy84RVL7AzEICgdY5hLcqfOZPuGf0Cc7E078yGY6hBw++pYiKXQmnYI1FwKBgHSq
/jSekqQudlRqAR1EMFy6BUwaXAMOmdmpt8LN3cuMBylS8AR5TFZ6tQ+eLq+N3oAk
vDYqNBn/oNlPfs1/XL2VY6lsf4qHAVRSY+A05gsHIn0hFHL3/ai9+HwYQeifsmsh
N+D7Uu3X2CUeY9xC1abSHSQ7MdWENNOOVWuUisMDAoGAcvcQXm3O6qFK7oxnDa0U
cRKJ06sB5mihRob7jbxr0dJUrevw508zAKUtWmjTwSxuKbZfnzLahvZoKr6Lnu1r
KZj6L6WLPwj9cnWfi6jE05Tl7NhwaLkBPpaZb6rIGJ9cansIEhMU1xRuH+rWjXV/
5ItQ8QkgJbrIZYNWhLPUa5o=
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2ARjrMaLgLQG7OfQTTd
1mVElggqtgWpltDCacnW191oHH+zVHKKcJGDaRGfUMyJ5yjui6Ahd3UrC4Ht7LPi
OP6COCZZ79jadQda6j2yyDo3CHntozvSToaUUyRhOBuWHEOJeee5sJP21udSyvTE
oB9TwXzU25OeNhUskBhF1uV3ybEYFk3rJPd8y7E4LJA5H88zFOjS1ko3g798TiT0
AaIAXhfGI3/Kp4GMyxVUIAdC1gk/QkpdM1cthaUznLjPYLYB8LH0WstX8Qu09HgL
kLBmoEuNK4N6+dSdReVqP8XeiR0WgBnxqk0Kz1Jzs5oO0jYx6pdGWpiMt2t1Itlh
6QIDAQAB
-----END PUBLIC KEY-----
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImFmZTYyNTk3LTRjZDgtNGFkMi1hMDEyLWRlYjIzMjdlNTcxMiJ9.eyJhdWQiOiJwdWJsaWMtYXBpLXYyIiwiaWF0IjoxNTE2MjM5MDIyLCJqdGkiOiIyOTE2Nzk5NS0zNDgzLTQ1OGQtODJkMC04NDJhODY3ZTJlYzYifQ.TfJk91TB1zwuAtNYPtjOsCeHcKIJYp6uvm-HqehkFJ49W8E2Ve8IAFYLW3n5zqro1b_M2Q2vsSFQzOFstxWv3qbJw6e3MHlcjoMHqK9UaUeSL4qLpyWMsGA45wqXljIOUzy8HGyu7pX9LV5k2PSH0BTakv_63_QD-QokHgcE7uGe3c2bm78crgg5WCZzguzgTscMIcoDT0DanQn2ALgTs-1fhx1Ql-dr6qYfpBjR8YsCkcIbQEo2lwVsGLx3uZK_mZYCBQWuBYNuG37cVG8ndgSiit6KuuQ6VYuU7Uh3mQ_jNTIOBup14ObJPexCU5caFdhaDd_c4Hx0P1ATDQfwdQ

請確認送出的 JWT(JSON Web Token) 格式是否正確。
JWT 應為一個 字串,由三個部分組成,並以 "." 串接。

正確格式範例

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 若確認格式正確,但仍遇到問題,請在 群組內向我方技術團隊回報

私鑰(Private Key) 可在後台 訪問令牌管理頁面 創建令牌後獲取。