Criterio AccessEntity

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

icona criterio di accesso entità

Cosa

Recupera i profili delle entità specificati dal datastore Apigee. Il criterio inserisce il profilo in una variabile il cui nome segue il formato AccessEntity.{policy_name}. Puoi utilizzare AccessEntity per accedere ai profili delle seguenti entità:

  • App
  • Prodotto API
  • Chiave utente
  • Sviluppatore

Il criterio AccessEntity funziona come una ricerca nel database di runtime basata su criteri. Puoi utilizzare le informazioni del profilo restituite da questo criterio per attivare un comportamento dinamico, ad esempio il routing degli endpoint condizionali, l'esecuzione del flusso, l'applicazione dei criteri.

Utilizza il criterio AccessEntity per ottenere i dati del profilo dell'entità come XML (o JSON in Apigee Hybrid) e inserirli in una variabile. Identifica l'entità da recuperare specificando un tipo di entità e uno o più identificatori che specificano l'entità di quel tipo che ti interessa. In seguito, in un altro criterio, puoi recuperare i dati del profilo dell'entità con un altro criterio, ad esempio un criterio ExtractVariables o AssignMessage.

Questo criterio è un criterio estensibile e il suo utilizzo potrebbe comportare implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni per l'utilizzo, consulta Tipi di criteri.

Accedere alle entità AppGroups da AccessEntity

Puoi anche utilizzare AccessEntity per recuperare le entità AppGroup. Consulta Tipi di entità e identificatori supportati per le entità correlate.

Per informazioni su AppGroups e sulle funzionalità supportate, consulta Utilizzare AppGroups per organizzare la proprietà delle app.

Esempi

Gli esempi riportati di seguito mostrano AccessEntity utilizzato in combinazione con le norme ExtractVariables e AssignMessage per estrarre l'email di uno sviluppatore e aggiungerla all'intestazione HTTP.

Ricevere l'email dello sviluppatore per utilizzarla in altri criteri

Configura il criterio AccessEntity per specificare quale profilo dell'entità recuperare da Apigee, nonché dove inserire i dati del profilo.

Nell'esempio seguente il criterio recupera un profilo dell'entità developer utilizzando una chiave API passata come parametro di query per identificare lo sviluppatore. Il profilo viene inserito in una variabile il cui nome segue il formato AccessEntity.{policy_name}. Pertanto, la variabile impostata da questo criterio sarà AccessEntity.GetDeveloperProfile.

<AccessEntity name="GetDeveloperProfile">
  <!-- This is the type entity whose profile we need to pull from the Apigee 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>

Utilizza un altro criterio per recuperare il valore del profilo dell'entità dalla variabile impostata da AccessEntity.

Nell'esempio seguente, un criterio ExtractVariables recupera un valore dalla variabile AccessEntity.GetDeveloperProfile impostata in precedenza da AccessEntity.

Tieni presente che il valore recuperato è specificato come espressione XPath nell'elemento XMLPayload. Il valore estratto viene inserito in una variabile 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>

Il seguente criterio AssignMessage recupera l'indirizzo email dello sviluppatore impostato dal criterio 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>

Riferimento elemento

La struttura di base di un criterio AccessEntity è:

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

Puoi accedere a più entità dello stesso tipo raggruppandole in un elemento 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>

Attributi <AccessEntity>

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

La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:

Attributo Descrizione Predefinito Presenza
name

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta su false per restituire un errore quando un criterio non va a buon fine. Questo è un comportamento previsto per la maggior parte dei criteri.

Imposta su true per continuare l'esecuzione del flusso anche dopo un fallimento del criterio. Vedi anche:

falso Facoltativo
enabled

Imposta su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.

true Facoltativo
async

Questo attributo è stato ritirato.

falso Ritirato

Elemento <DisplayName>

Da utilizzare insieme all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

<DisplayName>Policy Display Name</DisplayName>
Predefinito

N/D

Se ometti questo elemento, viene utilizzato il valore dell'attributo name del criterio.

Presenza Facoltativo
Tipo Stringa

Elemento <EntityIdentifier>

Specifica la determinata entità, del tipo specificato in EntityType, da recuperare.

<EntityIdentifier ref="value_variable" type="identifier_type"/> 
Predefinito N/D
Presenza Obbligatorio
Tipo Stringa

Attributi

Attributo Descrizione Predefinito Presenza Tipo
ref

La variabile che fornisce l'origine dell'identificatore, ad esempio request.queryparam.apikey.

N/D Obbligatorio Stringa
tipo Il tipo compilato dalla variabile nell'attributo ref, ad esempio consumerkey. Per un elenco dei valori, consulta Identificatori e tipi di entità supportati. Obbligatorio Stringa

Esempio

<?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>

Elemento <EntityType>

Specifica il tipo di entità da recuperare dal datastore.

<EntityType  value="entity_type"/>
Predefinito N/D
Presenza Obbligatorio
Tipo Stringa

Utilizza un elemento EntityIdentifier per specificare l'entità del tipo specificato che ti interessa. Per un riferimento ai tipi di entità, consulta Tipi di entità e identificatori supportati.

Attributi

Attributo Descrizione Predefinito Presenza Tipo
valore Uno dei tipi di entità supportati. Per un elenco, consulta Tipi di entità e identificativi supportati. Nessuno Obbligatorio Stringa

Elemento <OutputFormat>

Specifica il formato restituito dal criterio AccessEntity: XML o JSON.

<OutputFormat>XML</OutputFormat>
Predefinito

XML

Se ometti questo elemento, il valore predefinito è XML.

Presenza Facoltativo
Tipo Stringa (XML o JSON)

Elemento <SecondaryIdentifier>

In combinazione con EntityIdentifier, specifica un valore per identificare l'istanza EntityType desiderata.

<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
Predefinito N/D
Presenza Facoltativo
Tipo Stringa

L'utilizzo di SecondaryIdentifier quando viene specificato solo un EntityIdentifier non garantisce che venga restituita una singola entità. Per ulteriori informazioni, consulta la sezione Restringere i risultati con identificatori secondari.

L'utilizzo di più elementi SecondaryIdentifier non è supportato.

Attributi

Attributo Descrizione Predefinito Presenza Tipo
ref

La variabile che fornisce l'origine dell'identificatore, ad esempio request.queryparam.apikey.

N/D Obbligatorio Stringa
tipo Il tipo compilato dalla variabile nell'attributo ref, ad esempio consumerkey. Per un elenco dei valori, consulta Identificatori e tipi di entità supportati. Obbligatorio Stringa

Esempio

<?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>

Note sull'utilizzo

Restringere i risultati con identificatori secondari

Per alcune entità, fornire un identificatore potrebbe non essere sufficientemente specifico per ottenere l'entità che ti interessa. In questi casi, puoi utilizzare un identificatore secondario per restringere i risultati.

La prima configurazione dei criteri, eventualmente generica, potrebbe avere il seguente aspetto:

<?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>

Poiché un'app può essere associata a più prodotti API, l'utilizzo solo dell'ID app potrebbe non restituire il prodotto API che ti interessa (potresti ottenere solo il primo di più prodotti corrispondenti).

Per ottenere un risultato più preciso, puoi utilizzare un SecondaryIdentifier. Ad esempio, potresti avere le variabili appname e developerid nel flusso perché vengono compilate per impostazione predefinita durante uno scambio OAuth 2.0. Puoi utilizzare i valori di queste variabili in un criterio AccessEntity per ottenere i dettagli del profilo dell'app richiedente.

La configurazione delle norme più specifica potrebbe avere il seguente aspetto:

<?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>

Tipi ed identificatori di entità supportati

AccessEntity supporta i seguenti tipi di entità e identificatori.

Valore EntityType Tipi di EntityIdentifier Tipi di SecondaryIdentifier
apiproduct appid apiresource
apiproductname
appname apiresource
developeremail
developerid
appgroupname
consumerkey apiresource
app appid
appname developeremail
developerid
appgroupname
consumerkey
authorizationcode authorizationcode
appgroupname appid
appgroupname
consumerkey
consumerkey
consumerkey consumerkey
consumerkey_scope consumerkey
developer appid
consumerkey
developeremail
developerid
requesttoken requesttoken consumerkey
verifier verifier

XML del profilo dell'entità di esempio

Per recuperare il valore del profilo dell'entità che ti interessa con XPath, devi conoscere la struttura del file XML del profilo. Per un esempio della struttura, utilizza una chiamata all'API Apigee per ottenere il XML per l'entità che ti interessa. Per maggiori dettagli, consulta la documentazione di riferimento dell'API Apigee.

Le seguenti sezioni includono il codice per le chiamate API, oltre a un esempio di XML della chiamata.

App

curl https://apigee.googleapis.com/v1/organizations/$ORG/apps/$APP \
  -X GET \
  -H "Accept:text/xml" \
  -H "Authorization: Bearer $TOKEN"

Consulta anche Ottieni app da ID app nel riferimento all'API Apigee.

In alternativa:

$ curl https://apigee.googleapis.com/v1/organizations/$ORG/developers/$DEVELOPER_EMAIL/apps/$APP \
  -X GET \
  -H "Accept:text/xml" \
  -H "Authorization: Bearer $TOKEN"

Consulta anche Ottieni dettagli sull'app sviluppatore nel riferimento all'API Apigee.

Profilo di esempio:

<?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>

Prodotto API

curl https://apigee.googleapis.com/v1/organizations/$ORG/apiproducts/$APIPRODUCT \
  -X GET \
  -H "Accept:text/xml" \
  -H "Authorization: Bearer $TOKEN"

Consulta anche Ottieni un prodotto API nel riferimento all'API Apigee.

XPath di esempio, recupera la seconda risorsa API (URI) dal prodotto API denominato weather_free:

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

Profilo di esempio restituito come 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>

Chiave utente

curl https://apigee.googleapis.com/v1/organizations/$ORGdevelopers/$DEVELOPER_EMAIL/apps/$APP/keys/$KEY \
  -X GET \
  -H "Accept:text/xml" \
  -H "Authorization: Bearer $TOKEN"

Consulta anche Recupera i dettagli della chiave per un'app per sviluppatori nel riferimento all'API Apigee.

XPath di esempio:

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

Profilo di esempio:

<?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>

Sviluppatore

curl https://apigee.googleapis.com/v1/organizations/$ORGdevelopers/$DEVELOPER_EMAIL \
  -X GET \
  -H "Accept:text/xml" \
  -H "Authorization: Bearer $TOKEN"

Consulta anche Diventa sviluppatore nel riferimento all'API Apigee.

XPath di esempio:

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

Profilo di esempio:

<?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>

Variabili di flusso

Quando viene recuperato il profilo dell'entità specificato nel criterio AccessEntity, l'oggetto profilo viene aggiunto al contesto del messaggio come variabile. È possibile accedervi come a qualsiasi altra variabile, facendo riferimento al nome della variabile. Il nome fornito dall'utente per il criterio AccessEntity viene impostato come prefisso della variabile del nome della variabile.

Ad esempio, se viene eseguito un criterio AccessEntity denominato GetDeveloper, il profilo viene memorizzato nella variabile AccessEntity.GetDeveloper. Il profilo può quindi essere analizzato utilizzando un XPath definito in un criterio ExtractVariables che specifica AccessEntity.GetDeveloper come origine.

Messaggi di errore

Per informazioni correlate, consulta Informazioni importanti sugli errori delle norme e Gestire gli errori.

Errori di runtime

Nessuno.

Errori di deployment

Nome dell'errore Stringa di errore Stato HTTP Si verifica quando
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] N/D Il tipo di entità utilizzato deve essere uno dei tipi supportati.

Argomenti correlati