1. 程式人生 > 實用技巧 >OAuth 2.0

OAuth 2.0

OAuth 2.0

OAuth 2.0 是一種授權機制,主要用來頒發令牌(token)。OAuth 的核心就是向第三方應用頒發令牌

概念及解釋

OAuth 2.0 的一個簡單解釋

OAuth 2.0 的四種方式

  • 授權碼(authorization-code) // 需要經過授權碼,適用於有前後端
  • 隱藏式(implicit) // 適用於沒有後端的應用,不需要授權碼
  • 密碼式(password): // 直接用使用者名稱密碼,用於內部應用
  • 客戶端憑證(client credentials) // 適用與對APP授權,而不是單個使用者

四種方式都需要在B站先註冊

淺談OAuth 和 OpenID 相關技術

OpenID 和 OAuth

兩者很像,但本質上來說它們是截然不同的兩個東西:

  • OpenID: 只用於 身份認證(Authentication),允許你以 同一個賬戶 在 多個網站登陸。它僅僅是為你的 合法身份 背書,當你以 Facebook 賬號登陸某個站點之後,該站點 無權訪問 你的在 Facebook 上的 資料。
  • OAuth: 用於 授權(Authorisation),允許 被授權方 訪問 授權方 的 使用者資料。

Access Token 和 Refresh Token

職責的分離:

  • refresh token: 負責 身份認證;
  • access token: 負責 請求資源。

JWT(JsonWebToken)

JWT 顧名思義,它是 JSON 結構的 token,由三部分組成:

  • header
  • payload
  • signature

header 用於描述 元資訊,例如產生 signature 的演算法:

{ "typ": "JWT", "alg": "HS256"}

payload 用於攜帶你希望 向服務端傳遞的資訊。你既可以往裡新增 官方欄位,例如:iss(Issuer), sub(Subject), exp(Expirationtime),也可以塞入 自定義的欄位

{ "userId": "b08f86af-35da-48f2-8fab-cef3904660bd"}

signature 譯為 簽名,建立簽名要分以下幾個步驟:

  1. 從 介面服務端 拿到 金鑰,假設為 secret。
  2. 對 header 進行 base64 編碼,假設結果為 headerStr。
  3. 將 payload 進行 base64 編碼,假設結果為 payloadStr。
  4. 將 headerStr 和 payloadStr 用 . 字元 拼裝起來成為字元 data。
  5. 以 data 和 secret 作為引數,使用 雜湊演算法 計算出 簽名。