核准及撤銷存取權杖

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

撤銷存取權和更新權杖

在某些情況下,應用程式必須明確撤銷或使權杖失效,例如使用者登出已啟用 OAuth 的應用程式時。撤銷權杖後,只要權杖尚未過期,隨時都能重新核准。

權杖撤銷程序的定義依據為 OAuth 2.0 權杖撤銷規格

Apigee Edge 提供 InvalidateToken 作業,可讓您設定專屬的權杖撤銷端點。發布這個端點的 URI 後,應用程式開發人員就能使 Edge 發行的權杖失效。

以下是 OAuthV2 政策和 InvalidateToken 作業的設定範例。在這種情況下,存取權杖和相關聯的更新權杖都會遭到撤銷。從技術上來說,由於串聯旗標設為 true,因此兩者都會遭到撤銷。如要進一步瞭解連鎖旗標的運作方式,請參閱下方的「權杖元素屬性」一節。

<OAuthV2 name="InvalidateToken">
  <Operation>InvalidateToken</Operation>
  <Tokens>
    <Token type="accesstoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

<Tokens>/<Token> 元素

識別指定要撤銷權杖的流程變數。舉例來說,如果開發人員應使用名為 access_token 的查詢參數提交撤銷要求,正確的流程變數會是 request.queryparam.access_token。如要在 HTTP 標頭中要求權杖,請將這個值設為 request.header.access_token

屬性

  • type (必要,字串):變數指定的權杖類型。支援的值為 accesstokenrefreshtoken:
    • 如要撤銷存取權杖,請指定類型 accesstoken。
    • 如要同時撤銷存取權杖和更新權杖,請指定類型 refreshtoken。如果看到「type refreshtoken」,Edge 會假設該權杖是更新權杖。如果找到該更新權杖,就會撤銷。如果找不到該更新權杖,Edge 會檢查是否為存取權杖。如果存取權杖存在,則會遭到撤銷。

      注意:如果您將已失效的權杖傳遞至 InvalidateToken 政策,政策不會傳回錯誤 (雖然您可能預期會傳回錯誤)。這類作業不會產生任何影響。
  • cascade (選用,布林值,預設值:true) 這個屬性的主要用途是撤銷更新權杖,但不會撤銷相關聯的存取權杖。請考量下列情況:
    • 只撤銷更新權杖,不要撤銷相關聯的存取權杖。如要這麼做,請將 <Token> 類型設為 refreshtoken,並將層疊設為 false
    • 撤銷存取權杖和更新權杖。如要這樣做,請將 <Token> 類型設為 accesstoken。串聯的值可以是 true (預設值) 或 false。如果設為 true,存取權杖和更新權杖都會遭到撤銷。如果設為 false,存取權杖就會遭到撤銷,且無法再使用更新權杖。詳情請參閱下方附註。
    • 撤銷存取權杖,但不撤銷相關聯的更新權杖。不支援。詳情請參閱下方的附註。

注意:基於安全考量,撤銷存取權杖時,系統也會一併撤銷相關聯的重新整理權杖。因此,您無法使用層疊屬性僅撤銷存取權杖。舉例來說,如果將 <Token> 類型設為 accesstoken,並將 cascade=false 設為,存取權杖會如預期遭到撤銷,但相關聯的更新權杖將無法使用。您無法使用這類權杖更新已撤銷的存取權杖。如要只撤銷更新權杖,主要用途就是使用級聯屬性。在這種情況下,請將 <Token> 類型設為 refreshtoken,並設定 cascade=false。系統會撤銷更新權杖,但相關聯的存取權杖仍有效 (直到過期或遭到撤銷為止)。詳情請參閱這篇 社群論壇討論

核准存取權杖和更新權杖

使用 ValidateToken 作業「重新核准」已撤銷的權杖。也就是說,套用這項作業後,目標存取或更新權杖的狀態會從「已撤銷」變更為「已核准」。您可以驗證任何尚未過期的已撤銷權杖。

<OAuthV2 name="ValidateToken">
  <Operation>ValidateToken</Operation>
  <Tokens>
    <Token type="refreshtoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

<Tokens>/<Token> 元素

找出指定要驗證符記的流程變數。舉例來說,如果開發人員應使用名為 access_token 的查詢參數提交驗證要求,正確的流程變數會是:request.queryparam.access_token。如要在 HTTP 標頭中要求權杖,請將這個值設為 request.header.access_token

屬性

  • type (必要,字串) 變數指定的權杖類型。支援的值為 accesstokenrefreshtoken
  • cascade (選用,布林值):這個選項預設為 true,會導致驗證傳播至相關聯的權杖。因此,如果套用至更新權杖,系統也會驗證相關聯的存取權杖。如果套用至存取權杖,系統也會驗證相關聯的更新權杖。如果將這個值設為 false,則只會驗證指定的存取或更新權杖。