跳至主要内容

Access Token

Access Token 是用戶在成功登入後,由授權伺服器發放給用戶端的一個字串。用戶端隨後的每一個 API 請求都會夾帶,讓後端伺服器知道「你是誰」以及「你有什麼權限」。

Access Token 可以透過 JWT 或是 Opaque Token 來發放,一個AccessToken 通常具備以下特性:

  • subject
  • scope
  • audience
  • expiry

兩種 Access Token 的區別在於資源伺服器如何驗證權杖:

每次接收到不透明權杖時,資源伺服器必須向授權伺服器發出額外請求以驗證權杖。

因為 JWT 包含所有必要的信息,並且資源伺服器可以從授權伺服器的 JSON Web Key Set (JWKS) 中緩存公鑰,所以資源伺服器可以在不向授權伺服器發出額外請求的情況下驗證 JWT。

存取權杖通常是短期有效的,具有過期時間(例如,1 小時)。當目前的權杖過期時,客戶端必須請求新的存取權杖。

與授權伺服器、資源伺服器的互動

+--------+              +----------------------+              +------------------+
| Client | | Authorization Server | | Resource Server |
+--------+ +----------------------+ +------------------+
| | |
| |<---- Request JWKS -------------------|
| | |
| |---- Return JWKS -------------------->|
| | |
|---- Request Authorization --->| |
| | |
|<--------- Issue JWT ----------| |
| | |
|---- Access Protected Resource (JWT) -------------------------------->|
| | |
| | Verify JWT |
| | (signature,claims) |
| | |
|<------------------------------ Response -----------------------------|
| | |

考慮 JWT 的情況下,管理資源的伺服器會定期和認證伺服器取得公鑰,當認證伺服器使用私鑰簽發 Token 後,便可以直接跟資源伺服器取得資源。