淺談API認證
今天來整理一下目前知道的API認證使用的方法:
1. API 金鑰 (API Key)
- 使用者獲取一組唯一的 API 金鑰來認證,每次請求都需要攜帶此金鑰。
- 適合較簡單的應用,但缺點是若金鑰洩露,則存在安全風險。
生成步驟:
- 生成一組唯一的 API 金鑰並分配給使用者。
- 使用者在每次 API 請求的 header 或 URL 中附加此金鑰。
- 伺服器驗證該金鑰的合法性。
生命週期:金鑰的有效期通常視需求而定,可設置為長期有效或定期更新。若金鑰洩露,則需要即時更新或撤銷。
2. 基本認證 (Basic Authentication)
- 以使用者名和密碼進行認證,通常通過 HTTP header 傳輸。
- 為了安全性,建議使用 HTTPS 並將密碼編碼成 Base64 格式,但依然不夠安全,適合基本應用。
生成步驟:
- 用戶通過伺服器提供的登錄介面,輸入用戶名和密碼。
- 在每個 API 請求的 Authorization header 中附帶 Base64 編碼的使用者名和密碼。
- 伺服器每次請求時驗證 Base64 解碼後的用戶名和密碼。
生命週期:一般適用於單次會話,登出或終止連線後需重新登錄。頻繁重複的基本認證請求易遭截取,因此多數只用於開發和測試
3. OAuth (Open Authorization)
- 一種常用於第三方應用的授權協議,如 OAuth 1.0 和 OAuth 2.0。它允許應用在不暴露用戶密碼的情況下,獲取用戶授權來存取 API。
- OAuth 2.0 是目前廣泛使用的標準,適合需要高安全性和多重授權角色的應用。
生成步驟:
- 用戶通過第三方應用程序獲取訪問授權(通常是授權碼)。
- 使用授權碼請求 OAuth 授權伺服器,獲取訪問令牌(Access Token)。
- 將訪問令牌附加在 API 請求 header 中。
- 伺服器檢查令牌的有效性,允許存取相應資源。
生命週期:訪問令牌通常具有較短的有效期(例如幾小時到一天)。令牌過期後需重新獲取。某些場景下會使用刷新令牌(Refresh Token)來延長訪問期限。
4. JWT (JSON Web Token)
- 授權信息以 JSON 格式存儲在 token 中,這些 token 會在伺服器和客戶端之間傳遞。
- JWT 在分佈式系統中應用廣泛,因為 token 是自包含的且有效期可控,但必須確保 token 的安全性。
生成步驟:
- 用戶通過伺服器進行認證,伺服器生成並返回一個帶有加密簽名的 JWT。
- 用戶在每次 API 請求的 header 中附加 JWT。
- 伺服器驗證 JWT 的合法性和完整性,允許存取資源。
生命週期:JWT 通常有設置過期時間(例如一小時到一天),過期後需重新獲取新的 token。JWT 可以無需狀態化的存儲,因此適合分佈式架構。
5. HMAC (Hash-Based Message Authentication Code)
- 使用者在發送請求時用密鑰對消息進行加密,伺服器根據相同的密鑰驗證消息的完整性。
- 使用於高安全性需求的場景,因為可以有效防止請求被篡改。
生成步驟:
- 用戶生成一組密鑰,用於加密請求中的時間戳和請求內容。
- 請求時,將時間戳和加密的哈希值(通常放在 header 或 URL 中)發送至伺服器。
- 伺服器根據同一密鑰生成哈希值,驗證請求的完整性和時效性。
生命週期:根據應用需求設定密鑰的有效期,密鑰洩露或變更時需重設。每次請求都需要重新計算哈希值,因此具有很好的時效性。
6. 多因素認證 (Multi-Factor Authentication, MFA)
- 結合多種認證方法,通常是密碼加上短信驗證或生物識別,來進一步提高安全性。
- 適合需要高度安全的應用,例如金融系統。
生成步驟:
- 用戶輸入用戶名和密碼通過基本認證。
- 伺服器發送二次驗證(如短信驗證碼、電子郵件或生物識別驗證)。
- 用戶通過二次驗證後,獲得訪問授權或 API token。
生命週期:每次登入會話都需要二次驗證。MFA 驗證一般僅針對首次登入過程中進行,因此每次登入的授權會話期結束時須重新驗證。
留言
張貼留言