撤銷及核准憑證

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

瞭解權杖撤銷

在某些情況下,應用程式必須明確撤銷或使個別權杖失效。一般來說,使用者登出支援 OAuth 的應用程式時,就會發生這種情況。已撤銷的權杖將無法再用於授權。權杖遭到撤銷後,如果應用程式將該權杖提供給 API Proxy,則具有 VerifyAccessToken 作業的 OAuthV2 政策會拒絕該權杖。

權杖撤銷標準由 IETF RFC 7009 定義,也就是 OAuth 2.0 權杖撤銷規格

您可以撤銷用戶端 ID 或整個開發人員應用程式,這也是撤銷特定權杖的替代方案。詳情請參閱「撤銷及核准開發人員應用程式金鑰」。與撤銷個別權杖相比,撤銷用戶端 ID 或開發人員應用程式所造成的影響更大。您撤銷用戶端 ID 或開發人員應用程式後,Apigee 會拒絕與該用戶端 ID 或開發人員應用程式相關聯的所有權杖,且不會再為該用戶端 ID 或開發人員應用程式發出新的權杖。

撤銷存取權杖或重新整理權杖後,您可以在權杖到期前隨時重新核准該權杖。重新核准憑證後,Apigee OAuthV2 政策會再次接受該憑證進行授權,直到憑證到期為止。權杖到期時間與權杖的核准或撤銷狀態無關。作業為 ValidateAccessToken 的 Apigee OAuthV2 政策,只有在權杖已核准 (或未撤銷) 且未過期時,才會接受存取權杖。同樣地,如果 Apigee OAuthV2 政策的「Operation」為 RefreshAccessToken,則只有在該權杖已核准 (或未撤銷) 且未過期時,才會接受該權杖。

您可以使用兩種政策來撤銷權杖:

OAuthV2 政策可一次撤銷及恢復單一權杖。RevokeOAuthV2 政策更具彈性,可依應用程式 ID 或使用者 ID 一次撤銷多個權杖。本頁的其餘部分說明如何使用 OAuthV2 政策來撤銷權杖,或恢復先前撤銷的權杖。

撤銷存取權和更新憑證

以下是使用 InvalidateToken 作業的 OAuthV2 政策設定範例。在本例中,由於 Token 元素的 cascade 屬性為 true,因此 Apigee 會撤銷存取權杖及其相關聯的更新權杖。

  <OAuthV2 name="InvalidateToken">
    <Operation>InvalidateToken</Operation>
    <Tokens>
      <Token type="accesstoken" cascade="true">request.queryparam.token</Token>
    </Tokens>
  </OAuthV2>
  

如要進一步瞭解層疊標記的運作方式,請參閱下文關於 Token 元素屬性的部分。

<Tokens>/<Token> 元素

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

您無法撤銷 JWT 格式的存取權杖。此外,您無法使用 OAuthV2 政策來撤銷與 JWT 格式存取權杖相關聯的更新權杖。如果此處指定的內容變數是指 JWT 存取權杖,或與 JWT 存取權杖相關聯的更新權杖,就會發生執行階段錯誤。您可以使用 RevokeOAuthV2 政策撤銷與 JWT 存取權杖相關聯的更新權杖。

屬性

  • type (必要,字串):指定變數所識別的符記類���。支援的���為 accesstokenrefreshtoken:
    • 如要撤銷存取權杖,請指定類型 accesstoken。
    • 如要撤銷存取權杖和更新憑證,請指定類型 refreshtoken。當它看到類型為 refreshtoken 時,Apigee 會假設憑證是重新整理憑證。如果找到該更新權杖,系統就會撤銷該權杖。如果找不到該重新整理權杖,Apigee 會檢查該權杖是否為存取權杖。如果存取權杖存在,系統會撤銷該權杖。

      注意:如果您將已失效的權杖傳遞至 InvalidateToken 政策,政策不會傳回錯誤,但您可能會預期會傳回錯誤。這類操作不會產生任何影響。
  • cascade (選用、布林值,預設值:true) 這個屬性的主要用途是撤銷重新整理權杖,但不會撤銷相關聯的存取權杖。請考慮下列情況:
    • 只撤銷更新權杖,而不要撤銷相關聯的存取權杖。如要這麼做,請將 <Token> 類型設為 refreshtoken,並將層疊設為 false
    • 撤銷存取權杖和更新權杖。如要這樣做,請將 <Token> 類型設為 accesstoken。cascade 的值可以是 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,則只會驗證指定的存取或重新整理權杖。