淺談API認證

   今天來整理一下目前知道的API認證使用的方法:

1. API 金鑰 (API Key)

  • 使用者獲取一組唯一的 API 金鑰來認證,每次請求都需要攜帶此金鑰。
  • 適合較簡單的應用,但缺點是若金鑰洩露,則存在安全風險。
  • 生成步驟

    1. 生成一組唯一的 API 金鑰並分配給使用者。
    2. 使用者在每次 API 請求的 header 或 URL 中附加此金鑰。
    3. 伺服器驗證該金鑰的合法性。

    生命週期:金鑰的有效期通常視需求而定,可設置為長期有效或定期更新。若金鑰洩露,則需要即時更新或撤銷。

2. 基本認證 (Basic Authentication)

  • 以使用者名和密碼進行認證,通常通過 HTTP header 傳輸。
  • 為了安全性,建議使用 HTTPS 並將密碼編碼成 Base64 格式,但依然不夠安全,適合基本應用。
  • 生成步驟

    1. 用戶通過伺服器提供的登錄介面,輸入用戶名和密碼。
    2. 在每個 API 請求的 Authorization header 中附帶 Base64 編碼的使用者名和密碼。
    3. 伺服器每次請求時驗證 Base64 解碼後的用戶名和密碼。

    生命週期:一般適用於單次會話,登出或終止連線後需重新登錄。頻繁重複的基本認證請求易遭截取,因此多數只用於開發和測試

3. OAuth (Open Authorization)

  • 一種常用於第三方應用的授權協議,如 OAuth 1.0 和 OAuth 2.0。它允許應用在不暴露用戶密碼的情況下,獲取用戶授權來存取 API。
  • OAuth 2.0 是目前廣泛使用的標準,適合需要高安全性和多重授權角色的應用。
  • 生成步驟

    1. 用戶通過第三方應用程序獲取訪問授權(通常是授權碼)。
    2. 使用授權碼請求 OAuth 授權伺服器,獲取訪問令牌(Access Token)。
    3. 將訪問令牌附加在 API 請求 header 中。
    4. 伺服器檢查令牌的有效性,允許存取相應資源。

    生命週期:訪問令牌通常具有較短的有效期(例如幾小時到一天)。令牌過期後需重新獲取。某些場景下會使用刷新令牌(Refresh Token)來延長訪問期限。

4. JWT (JSON Web Token)

  • 授權信息以 JSON 格式存儲在 token 中,這些 token 會在伺服器和客戶端之間傳遞。
  • JWT 在分佈式系統中應用廣泛,因為 token 是自包含的且有效期可控,但必須確保 token 的安全性。
  • 生成步驟

    1. 用戶通過伺服器進行認證,伺服器生成並返回一個帶有加密簽名的 JWT。
    2. 用戶在每次 API 請求的 header 中附加 JWT。
    3. 伺服器驗證 JWT 的合法性和完整性,允許存取資源。

    生命週期:JWT 通常有設置過期時間(例如一小時到一天),過期後需重新獲取新的 token。JWT 可以無需狀態化的存儲,因此適合分佈式架構。

5. HMAC (Hash-Based Message Authentication Code)

  • 使用者在發送請求時用密鑰對消息進行加密,伺服器根據相同的密鑰驗證消息的完整性。
  • 使用於高安全性需求的場景,因為可以有效防止請求被篡改。
  • 生成步驟

    1. 用戶生成一組密鑰,用於加密請求中的時間戳和請求內容。
    2. 請求時,將時間戳和加密的哈希值(通常放在 header 或 URL 中)發送至伺服器。
    3. 伺服器根據同一密鑰生成哈希值,驗證請求的完整性和時效性。

    生命週期:根據應用需求設定密鑰的有效期,密鑰洩露或變更時需重設。每次請求都需要重新計算哈希值,因此具有很好的時效性。

6. 多因素認證 (Multi-Factor Authentication, MFA)

  • 結合多種認證方法,通常是密碼加上短信驗證或生物識別,來進一步提高安全性。
  • 適合需要高度安全的應用,例如金融系統。
  • 生成步驟

    1. 用戶輸入用戶名和密碼通過基本認證。
    2. 伺服器發送二次驗證(如短信驗證碼、電子郵件或生物識別驗證)。
    3. 用戶通過二次驗證後,獲得訪問授權或 API token。

    生命週期:每次登入會話都需要二次驗證。MFA 驗證一般僅針對首次登入過程中進行,因此每次登入的授權會話期結束時須重新驗證。

留言

熱門文章