2 minute read

Tags:

Bearer Token

  • RFC6750

  • 三種方法

    • Authorization Request Header Field
      • Authorization: Bearer xxxxxxxxxxxxxx
    • Form-Encoded Body Parameter
      • Content-Type: application/x-www-form-urlencoded
      • access_token=xxxxxxxxxxxx
    • URI Query Parameter 不建議拉!!!(以前單位好像這樣XDDD)
      • GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
      • Cache-Control: private
      • Cache-Control: no-store
  • 資源提供者無法驗證 Bearer Token
    • Response 要回應 WWW-Authenticate 標頭
      •    HTTP/1.1 401 Unauthorized
           WWW-Authenticate: Bearer realm="example"
        
    • 無效 or 過時的 Bearer Token
      • HTTP/1.1 401 Unauthorized
            WWW-Authenticate: Bearer realm="example",
            error="invalid_token",
            error_description="The access token expired"
        
  • 三種錯誤代碼

    • invalid_request
    • invalid_token
    • insufficient_scope

Refresh Token (刷新權杖)

  • When Access Token expired or access new scope request 可以使用 Refresh Token

  • 重新核發 Access Token 原來 Refresh Token失效

  • 授權伺服器 核發 Access Token 可同時回應一組 Refresh Token

    • 授權伺服器不一定要核發 Refresh Token用戶端

JWT Token (iat, nbf, exp)

  • Say, you’re selling some API or resource. And a client purchased access that lasts for one hour and the access starts tomorrow in the midday.

  • So you issue a JWT with:

    • ;iat set to now
    • nbf set to tomorrow 12:00pm
    • exp set to tomorrow 1:00pm

安全性 & 方便性 永遠是天秤兩端!!!

OAuth 2.0 的 4 種授權流程

  • RFC 6749

    • 授權碼 Authorization Code Grant
      • Imgur
      • 適合
        • client 位於 受信任 得環境 (大多是 Web 應用程式)
      • 基本限制
        • 透過 Browser 進行轉址
    • 隱含授權 Implicit Grant
      • Imgur
      • URL fragment
        • 在 w3c 定義下 server 拿不到 url # 後面的資訊
        • Imgur
      • 適合
        • client 位於 不受信任 的環境 (大多SPA應用程式)
      • 基本限制
        • 需透過 Browser 轉址
        • 禁止核發 Refresh Token
    • 密碼認證 Resource Owner Password Credentials (ROPC) Grant
      • Imgur
      • 適合
        • Resource OwnerClient 高度信任 的環境
    • 用戶端認證 Client Credentials Grant
      • Imgur
      • 適合
        • 沒有 Resource Owner 可以介入授權的情境 (ex: 背景執行的服務)
  • 自行擴充新的授權流程

    • 裝置授權

Device Code

Native App Authorization via an External User-Agent

OpendID Connect (OIDC)

  • OIDC 1.0 基於 OAuth 2.0 的身份識別規範
    • 提供 API 可以讓 用戶端 取得 使用者 的基本個人資訊 (profile)
    • 允許 client 透過 OAuth2.0 取得 Access Token 一併取得 ID Token (使用者的識別資訊)
  • 兩者的差異之處
    • OAuth 2.0 主要著重在 Authorization
    • OpenID Connect 著重在 Identity
  • 主要腳色

    • End User
    • Identifier (ID)
    • Relying Party (RP) (Client)
    • OpenID Provider (OP)
  • OpenID 主要運作流程
+--------+                                   +--------+
|        |                                   |        |
|        |---------(1) AuthN Request-------->|        |
|        |                                   |        |
|        |  +--------+                       |        |
|        |  |        |                       |        |
|        |  |  End-  |<--(2) AuthN & AuthZ-->|        |
|        |  |  User  |                       |        |
|   RP   |  |        |                       |   OP   |
|        |  +--------+                       |        |
|        |                                   |        |
|        |<--------(3) AuthN Response--------|        |
|        |                                   |        |
|        |---------(4) UserInfo Request----->|        |
|        |                                   |        |
|        |<--------(5) UserInfo Response-----|        |
|        |                                   |        |
+--------+                                   +--------+

關於 ID Token

  • 基本身分識別資訊
    • ID Token 使用 JWT 格式來呈現
    • ID Token 必須透過 JWS 進行簽章處理
    • ID Token 使用 JWE 進行加密處理

關於 Claims

  • 描述使用者 End User 的 識別資訊 (聲明資訊)

  • 在身份驗證過程中 使用者透過 OAuth 2.0 決定 用戶端 可取得哪寫 Claims (識別資訊) (聲明資訊)

  • OpenID Connect : Standard Claims

    • sub (Subject)
    • name (End-User’s full name)
    • email (End-User’s preferred e-mail address)
    • gender (End-User’s gender) (female, male)
    • locale (End-User’s locale)
  • ID Token 使用了以下 Claims

    • 必要的 Claims
      • iss (Issuer Identifier)
      • sub (Subject identifier)
      • aud (Audience)
      • exp (Expiration time)
      • iat (Issues At)
    • 非必要 Claims
      • auth_time
      • nonce
      • acr
      • amr
      • azp

JSON Web Token (JWT)