撤銷 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。您可以將 <AppEndUser> 元素新增至 OAuthv2 政策,藉此將 Apigee 設為納入使用者 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 的查詢參數中找到存取權杖的開發人員應用程式 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> 會指定世界標準時間 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>

<RevokeOAuthV2> 屬性

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

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

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

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

您也可以選擇使用 <DisplayName> 元素,在管理 UI Proxy 編輯器中使用不同的自然語言名稱為政策加上標籤。

不適用 需要
continueOnError

如果設為 false,即可在政策失敗時傳回錯誤。大部分政策都是預期中的行為。

設為 true,即可在政策失敗後繼續執行資料流。

false 選用
enabled

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

設為 false 即可停用這項政策。即使政策仍附加在流程中,系統也不會強制執行政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

<DisplayName> 元素

除了 name 屬性外,您還可以使用不同的自然語言名稱,在管理 UI Proxy 編輯器中為政策加上標籤。

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

不適用

如果省略這個元素,系統會使用政策的 name 屬性值。

存在必要性 選用
類型 字串

<AppId> 元素

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

<AppId>appIdString</AppId>

or:

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

request.formparam.app_id (是 x-www-form-url 編碼,並在要求主體中指定)

存在必要性

選用

類型 字串
有效值

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

<Cascade> 元素

如果為 true,且您擁有傳統不透明存取權杖,則當 <AppId><EndUserId> 相符時,更新權杖和存取權杖都會遭到撤銷。如果設為 false,系統只會撤銷存取權杖,更新權杖會維持不變。相同的行為僅適用於不透明的存取權杖。

<Cascade>false<Cascade>
預設

false

存在必要性

選用

類型 布林值
有效值 truefalse

<EndUserId> 元素

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

<EndUserId>userIdString</EndUserId>

or:

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

request.formparam.enduser_id (是 x-www-form-url 編碼,並在要求主體中指定)

存在必要性

選用

類型 字串
有效值

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

<RevokeBeforeTimestamp> 元素

撤銷在時間戳記之前核發的權杖。這個元素可與 <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 不得留空。

部署錯誤

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

錯誤變數

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

Variables 地點 範例
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>

相關主題