本頁適用於 Apigee 和 Apigee 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 政策,使用
InvalidateToken
的Operation
。 - RevokeOAuthV2 政策。
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
(必要,字串):指定變數所識別的符記類���。支援的���為accesstoken
和refreshtoken:
- 如要撤銷存取權杖,請指定類型 accesstoken。
- 如要撤銷存取權杖和更新憑證,請指定類型 refreshtoken。當它看到類型為 refreshtoken 時,Apigee 會假設憑證是重新整理憑證。如果找到該更新權杖,系統就會撤銷該權杖。如果找不到該重新整理權杖,Apigee 會檢查該權杖是否為存取權杖。如果存取權杖存在,系統會撤銷該權杖。
注意:如果您將已失效的權杖傳遞至 InvalidateToken 政策,政策不會傳回錯誤,但您可能會預期會傳回錯誤。這類操作不會產生任何影響。
-
cascade
(選用、布林值,預設值:true) 這個屬性的主要用途是撤銷重新整理權杖,但不會撤銷相關聯的存取權杖。請考慮下列情況:- 只撤銷更新權杖,而不要撤銷相關聯的存取權杖。如要這麼做,請將 <Token> 類型設為
refreshtoken
,並將層疊設為false
。 - 撤銷存取權杖和更新權杖。如要這樣做,請將 <Token> 類型設為
accesstoken
。cascade 的值可以是true
(預設值) 或false
。如果將其設為true
,則會撤銷存取權杖和重新整理權杖。如果將其設為false
,系統會撤銷存取權杖,且無法使用更新權杖。詳情請參閱下方的附註。 - 撤銷存取權杖,但不要撤銷相關聯的更新權杖。不支援。詳情請參閱下方的附註。
- 只撤銷更新權杖,而不要撤銷相關聯的存取權杖。如要這麼做,請將 <Token> 類型設為
注意:基於安全考量,如果您撤銷存取權杖,相關的重新整理權杖也會一併撤銷。因此,您無法使用層疊屬性只撤銷存取權杖。舉例來說,如果您將 <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
(必要,字串) 指定變數所識別的符記類型。支援的值為accesstoken
和refreshtoken
。cascade
(選用,布林值):預設值為true
,會導致驗證作業傳播至相關聯的符記。因此,如果套用至更新憑證,其相關聯的存取權杖也會經過驗證。如果套用至存取權杖,也會驗證相關聯的更新憑證。如果將這個值設為false
,則只會驗證指定的存取或重新整理權杖。