AccessEntity 政策

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

結果

從 Apigee Edge 資料儲存庫擷取您指定的實體設定檔。政策會將 但名稱格式為 AccessEntity.{policy_name} 的設定檔。個人中心 可以使用 AccessEntity 存取下列實體的設定檔:

  • 應用程式
  • API 產品
  • 公司
  • 公司開發商
  • 消費者金鑰
  • 開發人員
,瞭解如何調查及移除這項存取權。

AccessEntity 政策的作用是執行政策型執行階段資料庫查詢。個人中心 這項政策傳回的設定檔資訊,即可啟用動態行為,例如 條件式端點轉送、流程執行、政策強制執行

您使用 AccessEntity 政策取得實體設定檔資料, XML 檔案並貼到變數中。您可以指定實體,藉此識別要取得的實體 類型,以及一或多個用來指定該類型實體的 ID。稍後傳送 另一項政策,你可以透過其他政策擷取實體設定檔資料,例如將 ExtractVariables 政策AssignMessage 政策

範例

下列範例顯示 AccessEntity 用於擷取開發人員的 ExtractVariablesAssignMessage 政策 並將其新增至 HTTP 標頭。

取得用於其他政策的開發人員電子郵件地址

設定 AccessEntity 政策,指定要從哪個實體設定檔取得 以及設定檔資料的存放位置。

在以下範例中,政策會取得 developer 實體設定檔, 以查詢參數形式傳遞的 API 金鑰,用於識別開發人員。如果設定檔位於 變數名稱的格式為 AccessEntity.{policy_name}。所以變數 政策設定後的結果會是 AccessEntity.GetDeveloperProfile

<AccessEntity name="GetDeveloperProfile">
  <!-- This is the type entity whose profile we need to pull from the Edge datastore. -->
  <EntityType  value="developer"/>
  <!-- We tell the policy to use the API key (presented as query parameter) to identify the developer. -->
  <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/> 
</AccessEntity>

使用其他政策,從以下設定的變數中擷取實體設定檔值: AccessEntity

在以下範例中,ExtractVariables 政策會從 先前設定的 AccessEntity.GetDeveloperProfile 變數 AccessEntity

請注意,擷取到的值在 XMLPayload 元素。擷取的值會放在 developer.email 變數。

<ExtractVariables name="SetDeveloperProfile">
  <!-- The source element points to the variable populated by AccessEntity policy. 
  The format is <policy-type>.<policy-name>.
  In this case, the variable contains the whole developer profile. -->
  <Source>AccessEntity.GetDeveloperProfile</Source> 
  <VariablePrefix>developer</VariablePrefix>
  <XMLPayload>
    <Variable name="email" type="string"> 
        <!-- You parse elements from the developer profile using XPath. -->
      <XPath>/Developer/Email</XPath>
    </Variable>
  </XMLPayload>
</ExtractVariables>

下列 AssignMessage 政策會擷取由 ExtractVariables 政策

<!-- We'll use this policy to return the variables set in the developer profile, 
just so that we can easily see them in the response. -->
<AssignMessage name="EchoVariables">
  <AssignTo createNew="false" type="response"></AssignTo>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <Set>
    <Headers>
      <Header name="X-Developer-email">{developer.email}</Header>
    </Headers>
  </Set>
</AssignMessage>

元素參照

AccessEntity 政策的基本結構如下:

<AccessEntity name="policy_name">
  <EntityType  value="entity_type"/>
  <EntityIdentifier ref="entity_identifier" type="identifier_type"/> 
  <SecondaryIdentifier ref="secondary_identifier" type="identifier_type"/>
</AccessEntity>

想要存取多個同類型的實體,只要將它們歸類到 Identifiers 元素:

<AccessEntity name="name_of_the_policy">
  <EntityType  value="type_of_entity"/>
  <Identifiers>
    <Identifier>
      <EntityIdentifier ref="reference_to_entity_identifier" type*="identifier_type"/> 
      <SecondaryIdentifier ref="reference_to_secondary_entity_identifier" type="identifier_type"/><!-- optional -->
    </Identifier >
    <Identifier>
      <EntityIdentifier ref="reference_to_entity_identifier" type*="identifier_type"/> 
      <SecondaryIdentifier ref="reference_to_secondary_entity_identifier" type="identifier_type"/><!-- optional -->
    </Identifier >
  </Identifiers>
</AccessEntity>

&lt;AccessEntity&gt;屬性

<AccessEntity async="false" continueOnError="false" enabled="true" name="policy_name">

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

屬性 說明 預設 存在必要性
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;EntityIdentifier&gt;元素

指定要取得的特定實體 (實體類型指定類型)。

<EntityIdentifier ref="value_variable" type="identifier_type"/> 

預設

不適用

外觀狀態

必填

類型

字串

屬性

屬性 說明 預設 存在必要性 類型
參考資料

提供 ID 來源的變數,例如 request.queryparam.apikey

不適用 必填。 字串
類型 由 ref 屬性中變數填入的類型。例如 consumerkey。請參閱「實體類型和 ID」一文 列出值。 必填。 字串

範例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetCompany">
    <DisplayName>GetCompanyProfile</DisplayName>
    <EntityType value="company"></EntityType>
    <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/>
</AccessEntity>

&lt;EntityType&gt;元素

指定要從資料儲存庫擷取的實體類型。

<EntityType  value="entity_type"/>

預設

不適用

外觀狀態

必填

類型

字串

請使用 EntityIdentifier 元素指定 也就是您需要的指定類型實體如需實體類型的參考資料,請參閱實體類型和 ID

屬性

屬性 說明 預設 存在必要性 類型
其中一種支援的實體類型。請參閱實體類型和 ID 無。 必填。 字串

&lt;SecondaryIdentifier&gt;元素

搭配 EntityIdentifier 可指定值,以識別所需的 指定 EntityType 的例項。

<SecondaryIdentifier ref="value_variable" type="identifier_type"/>

預設

不適用

外觀狀態

選用

類型

字串

如果只指定 EntityIdentifier,請使用 SecondaryIdentifier 並不保證您一定會取得單一實體。請參閱縮小 含有次要 ID 的結果

不支援使用多個 SecondaryIdentifier 元素。

屬性

屬性 說明 預設 存在必要性 類型
參考資料

提供 ID 來源的變數,例如 request.queryparam.apikey

不適用 必填。 字串
類型 由 ref 屬性中變數填入的類型。例如 consumerkey。請參閱「實體類型和 ID」一文 列出值。 必填。 字串

範例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetAPIProduct">
    <DisplayName>GetAPIProduct</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="developer.app.name" type="appname"/> 
    <SecondaryIdentifier ref="developer.id" type="developerid"/> 
</AccessEntity>

使用須知

使用次要 ID 縮小結果範圍

對某些實體來說,只為一個 ID 提供可能不夠具體,無法取得實體 在這種情況下,您可以使用次要 ID 縮小結果範圍。

第一項設定可能會很廣泛的政策設定,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetApp">
    <DisplayName>GetAppProfile</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/>
</AccessEntity>

由於一個應用程式可以與多個 API 產品建立關聯,因此單單使用應用程式 ID 可能不會 傳回所需的 API 產品 (您只能取得多個相符產品的第一項)。

相反地,您可以使用 SecondaryIdentifier 來取得更確切的結果。適用對象 例如,您可以在流程中使用 appnamedeveloperid 變數 因為在 OAuth 2.0 交換庫期間,系統預設會填入這些資料。您可以使用 這些變數都能透過 AccessEntity 政策取得 應用程式。

具體的政策設定可能如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetApp">
    <DisplayName>GetAppProfile</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="developer.app.name" type="appname"/> 
    <SecondaryIdentifier ref="developer.id" type="developerid"/> 
</AccessEntity>

支援的實體類型和 ID

AccessEntity 支援下列實體類型和 ID。

實體類型值 實體識別碼類型 次要 ID 類型
apiproduct appid apiresource
apiproductname
appname apiresource
developeremail
developerid
companyname
consumerkey apiresource
app appid
appname developeremail
developerid
companyname
consumerkey
authorizationcode authorizationcode
company appid
company
consumerkey
companydeveloper companyname
consumerkey consumerkey
consumerkey_scope consumerkey
developer appid
consumerkey
developeremail
developerid
requesttoken requesttoken consumerkey
verifier verifier

實體個人資料 XML 範例

若要使用 XPath 擷取想要的實體設定檔值,您必須知道 設定檔 XML 的結構舉例來說,如要舉例說明結構,請用 Management API 呼叫 所使用實體的 XML。詳情請參閱 management API 參考資料

以下各節包含 API 呼叫的程式碼,以及呼叫中的 XML 範例。

應用程式

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \
-u email:password

另請參閱在 「依應用程式 ID 進行機構」,請參閱 Edge Management API 參考資料中的說明。

或:

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email}/apps/{app_name} \
-u email:password

另請參閱取得 Edge Management API 參考資料中的開發人員應用程式詳細資料

個人資料範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<App name="thomas-app">
    <AccessType>read</AccessType>
    <ApiProducts/>
    <Credentials>
        <Credential>
            <Attributes/>
            <ConsumerKey>wrqOOOiPArFI0WRoB1gAJMRbOguekJ5w</ConsumerKey>
            <ConsumerSecret>WvOhDrJ8m6kzz7Ni</ConsumerSecret>
            <ApiProducts>
                <ApiProduct>
                    <Name>FreeProduct</Name>
                    <Status>approved</Status>
                </ApiProduct>
            </ApiProducts>
            <Scopes/>
            <Status>approved</Status>
        </Credential>
    </Credentials>
    <AppFamily>default</AppFamily>
    <AppId>ab308c13-bc99-4c50-8434-0e0ed1b86075</AppId>
    <Attributes>
        <Attribute>
            <Name>DisplayName</Name>
            <Value>Tom's Weather App</Value>
        </Attribute>
    </Attributes>
    <CallbackUrl>http://tom.app/login</CallbackUrl>
    <CreatedAt>1362502872727</CreatedAt>
    <CreatedBy>admin@apigee.com</CreatedBy>
    <DeveloperId>PFK8IwOeAOW01JKA</DeveloperId>
    <LastModifiedAt>1362502872727</LastModifiedAt>
    <LastModifiedBy>admin@apigee.com</LastModifiedBy>
    <Scopes/>
    <Status>approved</Status>
</App>

API 產品

$ curl  -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apiproducts/{apiproduct_name} \
-u email:password

另請參閱取得 API 產品

XPath 範例,會從名為 weather_free:

/ApiProduct['@name=weather_free']/ApiResources/ApiResource[1]/text()

以 XML 格式傳回的設定檔範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ApiProduct name="weather_free">
    <ApiResources>
        <ApiResource>/forecastrss, /reports</ApiResource>
    </ApiResources>
    <ApprovalType>auto</ApprovalType>
    <Attributes>
        <Attribute>
            <Name>description</Name>
            <Value>Introductory API Product</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.interval</Name>
            <Value>1</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.limit</Name>
            <Value>1</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.timeunit</Name>
            <Value>minute</Value>
        </Attribute>
        <Attribute>
            <Name>servicePlan</Name>
            <Value>Introductory</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1355847839224</CreatedAt>
    <CreatedBy>andrew@apigee.com</CreatedBy>
    <Description>Free API Product</Description>
    <DisplayName>Free API Product</DisplayName>
    <Environments/>
    <LastModifiedAt>1355847839224</LastModifiedAt>
    <LastModifiedBy>andrew@apigee.com</LastModifiedBy>
    <Proxies/>
    <Scopes/>
</ApiProduct>

公司

$ curl   -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name} \
-u email:password

另請參閱取得 Edge Management API 參考資料中的公司詳細資料

個人資料範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Company name="theramin">
    <Apps/>
    <DisplayName>Theramin Corporation</DisplayName>
    <Organization>apigee-pm</Organization>
    <Status>active</Status>
    <Attributes>
        <Attribute>
            <Name>billing_code</Name>
            <Value>13648765</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1349208631291</CreatedAt>
    <CreatedBy>andrew@apigee.com</CreatedBy>
    <LastModifiedAt>1349208631291</LastModifiedAt>
    <LastModifiedBy>andrew@apigee.com</LastModifiedBy>
</Company>

公司開發商

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name}/developers/{developer_name} \
-u email:password

個人資料範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Developers>
    <Developer>
        <Email>ntesla@theramin.com</Email>
        <Role>developer</Role>
    </Developer>
</Developers>

消費者金鑰

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email}/apps/{app_name}/keys/{consumer_key} \
-u email:password

另請參閱 取得 Edge Management API 參考資料中的開發人員應用程式金鑰詳細資料

XPath 範例:

/Credential/ApiProducts/ApiProduct[Name='weather_free']/Status/text()

個人資料範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Credential>
    <Attributes/>
    <ConsumerKey>XLotL3PRxNkUGXhGAFDPOr6fqtvAhuZe</ConsumerKey>
    <ConsumerSecret>iNUyEaOOh96KR3YL</ConsumerSecret>
    <ApiProducts>
        <ApiProduct>
            <Name>weather_free</Name>
            <Status>approved</Status>
        </ApiProduct>
    </ApiProducts>
    <Scopes/>
    <Status>approved</Status>
</Credential>

開發人員

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email} \
-u email:password

另請參閱取得開發人員: Edge Management API 參考資料

XPath 範例:

/Developer/Attributes/Attribute[Name='my_custom_attribute']/Value/text()
/Developer/Email/text()

個人資料範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Developer>
    <Apps>
        <App>weatherappx</App>
        <App>weatherapp</App>
    </Apps>
    <Email>ntesla@theramin.com</Email>
    <DeveloperId>4Y4xd0KRZ1wmHJqu</DeveloperId>
    <FirstName>Nikola</FirstName>
    <LastName>Tesla</LastName>
    <UserName>theramin</UserName>
    <OrganizationName>apigee-pm</OrganizationName>
    <Status>active</Status>
    <Attributes>
        <Attribute>
            <Name>project_type</Name>
            <Value>public</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1349797040634</CreatedAt>
    <CreatedBy>rsaha@apigee.com</CreatedBy>
    <LastModifiedAt>1349797040634</LastModifiedAt>
    <LastModifiedBy>rsaha@apigee.com</LastModifiedBy>
</Developer>

流程變數

擷取 AccessEntity 政策中指定的實體設定檔時,採用 XML 格式 設定檔物件會以變數的形式加入訊息結構定義中。使用方法與任何其他應用程式相同 變數,並參照變數名稱。使用者提供的 AccessEntity 政策名稱 設為變數名稱的變數前置字串

舉例來說,如果執行名稱為 GetDeveloper 的 AccessEntity 政策, XML 格式設定檔會儲存在名為 AccessEntity.GetDeveloper。XML 格式設定檔接著可使用 在指定 AccessEntity.GetDeveloper 的 ExtractVariables 政策中定義的 XPath 做為來源

錯誤參考資料

如需相關資訊,請參閱政策錯誤須知處理錯誤

執行階段錯誤

無。

部署錯誤

錯誤名稱 錯誤字串 HTTP 狀態 發生時機
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] 不適用 使用的實體類型必須是支援的類型之一。

相關主題