撤銷 OAuth V2 政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

政策圖示

總覽

撤銷與開發人員應用程式 ID 或應用程式使用者 ID 相關聯的 OAuth2 存取權杖,或撤銷兩者。

使用 OAuthv2 政策產生 OAuth 2.0 存取權杖。Apigee 產生的權杖 格式如下:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

application_name 元素包含與權杖相關聯的開發人員應用程式 ID。

根據預設,Apigee 不會在權杖中加入使用者 ID。您可以設定 Apigee 將 <AppEndUser> 元素新增至 OAuthv2 政策,藉此取得使用者 ID:

<OAuthV2 name="GenerateAccessTokenClient">
    <Operation>GenerateAccessTokenV/Operation>
    ...
    <AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>

在本範例中,請將使用者 ID 傳送至名為 app_enduser 的查詢參數中的 OAuthv2 政策。 接著,使用者 ID 會包含在 app_enduser 元素的權杖中:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

由開發人員應用程式 ID 撤銷

撤銷與開發人員應用程式 ID 相關聯的 OAuth2 存取權杖。 Apigee 產生的所有 OAuth2 存取權杖都包含相關聯的開發人員應用程式 ID 與憑證建立連結接著,您就能根據該應用程式 ID 撤銷權杖。

依應用程式使用者 ID 撤銷

撤銷與特定應用程式使用者 ID 相關聯的 OAuth2 存取權杖。這就是符記 與核發權杖的使用者 ID 相關聯。

在預設情況下,OAuth 存取權杖中沒有用於使用者 ID 的欄位。如要啟用撤銷 依使用者 ID 劃分的 OAuth 2.0 存取權杖,您必須設定 OAuthv2 政策以加入使用者 ID 標記中,如上所示。

如要取得應用程式使用者 ID,請使用 Developer Apps API

範例

以下範例使用「撤銷 OAuth V2」政策撤銷 OAuth2 存取權杖。

開發人員應用程式 ID

如要依開發人員應用程式 ID 撤銷存取權杖,請在以下位置使用 <AppId> 元素: 您的政策。

下列範例預期在名為 app_id:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
</RevokeOAuthV2>

根據開發人員應用程式的 ID,這項政策會撤銷存取權杖。

在時間戳記之前撤銷

如要根據開發人員應用程式 ID 在特定日期和時間撤銷存取權杖, 在政策中使用 <RevokeBeforeTimestamp> 元素。<RevokeBeforeTimestamp> 會指定以毫秒為單位的 UTC Epoch 紀元時間。在該時間前核發的所有權杖都會遭到撤銷。

以下範例針對 2019 年 7 月 1 日前建立的開發人員應用程式,撤銷其存取權杖:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
  <RevokeBeforeTimestamp>1561939200000</RevokeBeforeTimestamp>
</RevokeOAuthV2>

<RevokeBeforeTimestamp> 元素採用 64 位元 (長) 整數,代表 自世界標準時間 1970 年 1 月 1 日午夜起經過的毫秒數。


元素參照

元素參照會說明 RevokeOAuthV2 政策的元素和屬性。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1">
  <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
  <AppId ref="variable"></AppId>
  <EndUserId ref="variable"></EndUserId>
  <RevokeBeforeTimestamp ref="variable"></RevokeBeforeTimestamp>
  <Cascade>false</Cascade>
</RevokeOAuthV2>

<撤銷 OAuthV2>屬性

<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">

下表說明所有政策父項元素的共同屬性:

屬性 說明 預設 存在必要性
name

政策的內部名稱。name 屬性的值可以 包含英文字母、數字、空格、連字號、底線和半形句號。此值不能 超過 255 個半形字元

視需要使用 <DisplayName> 元素,為政策加上標籤: 管理使用者介面 Proxy 編輯器,使用不同的自然語言名稱。

不適用 必填
continueOnError

如果設為「false」,系統會在政策失敗時傳回錯誤。這是可預期的情況 大多數政策的行為

如果設為 true,即使政策已發生,流程執行作業仍會繼續執行 失敗。

false 選用
enabled

如要強制執行政策,請設為 true

設為 false 即可停用政策。這項政策不會 仍會強制執行 政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

&lt;DisplayName&gt;元素

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然語言名稱。

<DisplayName>Policy Display Name</DisplayName>
預設

不適用

如果省略這個元素,政策的 name 屬性值會是

存在必要性 選用
類型 字串

&lt;AppId&gt;元素

指定要撤銷權杖的開發人員應用程式 ID。傳送包含 應用程式 ID 或常值應用程式 ID

<AppId>appIdString</AppId>

or:

<AppId ref="request.queryparam.app_id"></AppId>
預設

request.formparam.app_id (在要求中指定的 x-www-form-url 編碼) 內文)

存在必要性

選用

類型 字串
有效值

包含應用程式 ID 字串的流程變數,或常值字串。

<街機遊戲>元素

如果 true 而且您擁有傳統的不透明存取權杖, 如果 <AppId><EndUserId> 相符。 如果是 false, 則只會撤銷存取權杖,更新權杖則維持不變。同樣的行為 僅適用於不透明存取權杖

<Cascade>false<Cascade>
預設

false

存在必要性

選用

類型 布林值
有效值 truefalse

&lt;EndUserId&gt;元素

指定要撤銷權杖的應用程式使用者 ID。傳送包含 使用者 ID 或常值權杖字串

<EndUserId>userIdString</EndUserId>

or:

<EndUserId ref="request.queryparam.access_token"></EndUserId>
預設

request.formparam.enduser_id (在要求中指定的 x-www-form-url 編碼) 內文)

存在必要性

選用

類型 字串
有效值

包含使用者 ID 字串的流程變數,或常值字串。

&lt;RevokeBeforeTimestamp&gt;元素

撤銷時間戳記之前核發的權杖。這個元素可與 <AppId> 搭配使用 和 <EndUserId> 可讓您在特定時間前撤銷權杖。 預設值為政策的執行時間。

<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp>

or:

<RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
預設

執行政策的時間戳記。

存在必要性

選用

類型 64 位元 (長) 整數,代表自午夜起經過的毫秒數, 世界標準時間 1970 年 1 月 1 日
有效值

包含時間戳記的流程變數,或常值時間戳記。 時間戳記不得為未來日期,且不得早於 2014 年 1 月 1 日。

流程變數

RevokeOAuthV2 政策不會設定流程變數。

錯誤參考資料

本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤處理方式 發生錯誤

執行階段錯誤

執行政策時,可能會發生這些錯誤。下方顯示的錯誤名稱 是系統發生錯誤時指派給 fault.name 變數的識別碼。查看錯誤 變數一節。

錯誤程式碼 HTTP 狀態 原因
steps.oauth.v2.InvalidFutureTimestamp 500 時間戳記不得為未來的時間。
steps.oauth.v2.InvalidEarlyTimestamp 500 時間戳記不得早於 2014 年 1 月 1 日。
steps.oauth.v2.InvalidTimestamp 500 時間戳記無效。
steps.oauth.v2.EmptyAppAndEndUserId 500 AppdIdEndUserId 不得留空。

部署錯誤

如要瞭解部署錯誤,請參閱使用者介面中回報的訊息。

錯誤變數

當這項政策在執行階段觸發錯誤時,即可設定這些變數。

變數 地點 範例
fault.name="fault_name" fault_name 是錯誤的名稱,如上方「執行階段錯誤」表格所列。錯誤名稱是錯誤程式碼的最後部分。 fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name 是使用者指定錯誤的政策名稱。 oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name 是使用者指定錯誤的政策名稱。 oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name 是使用者指定錯誤的政策名稱。 oauthV2.GetTokenInfo.cause = ClientID is Invalid

錯誤回應範例

{
   "fault":{
      "faultstring":"Timestamp is in the future.",
      "detail":{
         "errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
      }
   }
}

錯誤規則範例

<FaultRule name="RevokeOAuthV2 Faults">
    <Step>
        <Name>AM-InvalidTimestamp</Name>
    </Step>
    <Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>

相關主題