Política VerifyAPIKey

Esta página se aplica ao Apigee e ao Apigee híbrido .

Veja a documentação do Apigee Edge .

ícone de política

Visão geral

A política "Verificar Chave de API" permite que você imponha a verificação de chaves de API em tempo de execução, permitindo que apenas aplicativos com chaves de API aprovadas acessem suas APIs. Essa política garante que as chaves de API sejam válidas, não tenham sido revogadas e estejam aprovadas para consumir os recursos específicos associados aos seus produtos de API.

Esta política é extensível e seu uso pode ter implicações de custo ou utilização, dependendo da sua licença da Apigee. Para obter informações sobre os tipos de política e as implicações de uso, consulte Tipos de política .

Para um tutorial mostrando como criar um proxy de API que usa a política Verificar chave de API, consulte Proteger uma API exigindo chaves de API .

Amostras

Digite o parâmetro de consulta

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.queryparam.apikey" />
</VerifyAPIKey>

Neste exemplo, a política espera encontrar a chave de API em uma variável de fluxo chamada request.queryparam.apikey . A variável request.queryparam.{name} é uma variável de fluxo padrão da Apigee que é preenchida com o valor de um parâmetro de consulta passado na solicitação do cliente.

O comando curl a seguir passa a chave da API em um parâmetro de consulta:

curl http://myorg-test.apigee.net/mocktarget?apikey=IEYRtW2cb7A5Gs54A1wKElECBL65GVls

Digite no cabeçalho

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.header.x-apikey" />
</VerifyAPIKey>

Neste exemplo, a política espera encontrar a chave de API em uma variável de fluxo chamada request.header.x-apikey . A variável request.header.{name} é uma variável de fluxo padrão da Apigee que é preenchida com o valor de um cabeçalho passado na solicitação do cliente.

O cURL a seguir mostra como passar a chave de API em um cabeçalho:

curl "http://myorg-test.apigee.net/mocktarget" -H "x-apikey:IEYRtW2cb7A5Gs54A1wKElECBL65GVls"

Chave na variável

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="requestAPIKey.key"/>
</VerifyAPIKey>

A política pode referenciar qualquer variável que contenha a chave. A política neste exemplo extrai a chave de API de uma variável chamada requestAPIKey.key .

A forma como essa variável é preenchida depende de você. Por exemplo, você pode usar a política Extrair Variáveis ​​para preencher requestAPIKey.key a partir de um parâmetro de consulta chamado myKey , conforme mostrado abaixo:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="SetAPIKeyVar">
    <Source>request</Source>
    <QueryParam name="myKey">
        <Pattern ignoreCase="true">{key}</Pattern>
    </QueryParam>
    <VariablePrefix>requestAPIKey</VariablePrefix>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Variáveis ​​de fluxo de política de acesso

<AssignMessage async="false" continueOnError="false" enabled="true" name="accessverifyvars">
    <AssignVariable>
        <Name>devFirstName</Name>
        <Ref>verifyapikey.verify-api-key.developer.firstName</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <AssignVariable>
        <Name>devLastName</Name>
        <Ref>verifyapikey.verify-api-key.developer.lastName</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <AssignVariable>
        <Name>devEmail</Name>
        <Ref>verifyapikey.verify-api-key.developer.email</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

A Apigee preenche automaticamente um conjunto de variáveis ​​de fluxo ao executar a política "Verificar Chave de API" para uma chave de API válida. Você pode usar essas variáveis ​​para acessar informações como o nome do aplicativo, o ID do aplicativo e informações sobre o desenvolvedor ou a empresa que registrou o aplicativo. No exemplo acima, você usa a política "Atribuir Mensagem" para acessar o nome, o sobrenome e o endereço de e-mail do desenvolvedor após a execução da "Verificar Chave de API".

Todas essas variáveis ​​são prefixadas por:

verifyapikey.{policy_name}

Neste exemplo, o nome da política de chave da API Verify é " verify-api-key ". Portanto, você faz referência ao primeiro nome do desenvolvedor que faz a solicitação acessando a variável verifyapikey.verify-api-key.developer.firstName.

Aprenda Apigee


Sobre a política de verificação de chave de API

Quando um desenvolvedor registra um aplicativo na Apigee, a Apigee gera automaticamente um par de chaves de consumidor e segredos. Você pode ver o par de chaves de consumidor e segredos do aplicativo na interface do usuário da Apigee ou acessá-los pela API da Apigee.

No momento do registro do aplicativo, o desenvolvedor seleciona um ou mais produtos de API para associar ao aplicativo, sendo um produto de API uma coleção de recursos acessíveis por meio de proxies de API. O desenvolvedor então passa a chave de API (chave do consumidor) como parte de cada solicitação para uma API em um produto de API associado ao aplicativo. Consulte Visão geral da publicação para obter mais informações.

Chaves de API podem ser usadas como tokens de autenticação ou para obter tokens de acesso OAuth. No OAuth, as chaves de API são chamadas de "ID do cliente". Os nomes podem ser usados ​​indistintamente. Consulte a página inicial do OAuth para mais informações.

A Apigee preenche automaticamente um conjunto de variáveis ​​de fluxo ao executar a política "Verificar Chave de API". Consulte "Variáveis ​​de fluxo" abaixo para obter mais informações.

Referência de Elemento

A seguir estão os elementos e atributos que você pode configurar nesta política:

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <APIKey ref="variable_containing_api_key"/>
    <CacheExpiryInSeconds ref="request.queryparam.cache_expiry">Default value</CacheExpiryInSeconds/>
</VerifyAPIKey>

Atributos <VerifyAPIKey>

O exemplo a seguir mostra os atributos na tag <VerifyAPIKey> :

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">

A tabela a seguir descreve atributos que são comuns a todos os elementos pai da política:

Atributo Descrição Padrão Presença
name

O nome interno da política. O valor do atributo name pode conter letras, números, espaços, hifens, sublinhados e pontos. Este valor não pode exceder 255 caracteres.

Opcionalmente, use o elemento <DisplayName> para rotular a política no editor de proxy da interface de gerenciamento com um nome diferente em linguagem natural.

N / D Obrigatório
continueOnError

Defina como false para retornar um erro quando uma política falhar. Este é o comportamento esperado para a maioria das políticas.

Defina como true para que a execução do fluxo continue mesmo após a falha de uma política. Veja também:

falso Opcional
enabled

Defina como true para aplicar a política.

Defina como false para desativar a política. A política não será aplicada mesmo se permanecer vinculada a um fluxo.

verdadeiro Opcional
async

Este atributo está obsoleto.

falso Descontinuado

Elemento <DisplayName>

Use em adição ao atributo name para rotular a política no editor de proxy da interface de gerenciamento com um nome diferente em linguagem natural.

<DisplayName>Policy Display Name</DisplayName>
Padrão

N / D

Se você omitir esse elemento, o valor do atributo name da política será usado.

Presença Opcional
Tipo Corda

Elemento <APIKey>

Este elemento especifica a variável de fluxo que contém a chave de API. Normalmente, o cliente envia a chave de API em um parâmetro de consulta, cabeçalho HTTP ou parâmetro de formulário. Por exemplo, se a chave for enviada em um cabeçalho chamado x-apikey , ela será encontrada na variável: request.header.x-apikey

Padrão N / D
Presença Obrigatório
Tipo Corda

Atributos

A tabela a seguir descreve os atributos do elemento <APIKey>

Atributo Descrição Padrão Presença
referência

Uma referência à variável que contém a chave de API. Apenas um local é permitido por política.

N / D Obrigatório

Exemplos

Nestes exemplos, a chave é passada em parâmetros e um cabeçalho chamado x-apikey .

Como parâmetro de consulta:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.queryparam.x-apikey"/>
</VerifyAPIKey>

Como um cabeçalho HTTP:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.header.x-apikey"/>
</VerifyAPIKey>

Como um parâmetro de formulário HTTP:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.formparam.x-apikey"/>
</VerifyAPIKey>

Elemento <CacheExpiryInSeconds>

Este elemento impõe o TTL no cache, o que permite a personalização do período de expiração do token de acesso armazenado em cache. O intervalo suportado é entre 1 e 180 segundos. Você pode fornecer uma variável de fluxo e uma variável padrão. Se fornecida, o valor da variável de fluxo tem precedência sobre o valor padrão especificado.

<CacheExpiryInSeconds ref="request.queryparam.cache_expiry">Value 1</CacheExpiryInSeconds>
Padrão N / D

Se você omitir esse elemento, o período de expiração padrão para o token de acesso armazenado em cache será de 180 segundos.

Presença Opcional
Tipo Inteiro
Valores válidos Qualquer número inteiro positivo e diferente de zero. Especifica o tempo de expiração em segundos.

Atributos

A tabela a seguir descreve os atributos do elemento <CacheExpiryInSeconds>

Atributo Descrição Padrão Presença
referência

Uma referência à variável de fluxo que contém o valor da expiração do cache, expresso em segundos.

Se fornecido, o valor da variável de fluxo tem precedência sobre o valor padrão especificado.

N / D Opcional

Esquemas

Variáveis ​​de fluxo

Quando uma política de Verificação de Chave de API é aplicada a uma chave de API válida, a Apigee preenche um conjunto de variáveis ​​de fluxo. Essas variáveis ​​ficam disponíveis para políticas ou códigos executados posteriormente no fluxo e costumam ser usadas para realizar processamento personalizado com base em atributos da chave de API, como o nome do aplicativo, o produto da API usado para autorizar a chave ou atributos personalizados da chave de API.

A política preenche vários tipos diferentes de variáveis ​​de fluxo, incluindo:

  • Em geral
  • Aplicativo
  • Desenvolvedor
  • Análise
  • Monetização

Cada tipo de variável de fluxo possui um prefixo diferente. Todas as variáveis ​​são escalares, exceto aquelas especificamente indicadas como matrizes.

Variáveis ​​de fluxo geral

A tabela a seguir lista as variáveis ​​de fluxo gerais preenchidas pela política Verificar Chave de API. Todas essas variáveis ​​são prefixadas por:

verifyapikey.{policy_name}

Por exemplo: verifyapikey.{policy_name}.client_id

As variáveis ​​disponíveis incluem:

Variável Descrição
client_id A chave do consumidor (também conhecida como chave de API ou chave de aplicativo) fornecida pelo aplicativo solicitante.
client_secret O segredo do consumidor associado à chave do consumidor.
redirection_uris Quaisquer URIs de redirecionamento na solicitação.
developer.app.id

O ID do desenvolvedor ou aplicativo AppGroup que faz a solicitação.

developer.app.name O nome do aplicativo do desenvolvedor ou do aplicativo AppGroup que faz a solicitação.
developer.id

O ID do desenvolvedor ou AppGroup registrado como proprietário do aplicativo solicitante.

developer.{custom_attrib_name} Quaisquer atributos personalizados derivados do perfil de chave do aplicativo.
DisplayName O valor do atributo <DisplayName> da política.
failed Defina como "true" quando a validação da chave de API falhar.
{custom_app_attrib} Qualquer atributo personalizado derivado do perfil do aplicativo. Especifique o nome do atributo personalizado.
apiproduct.name* O nome do produto da API usado para validar a solicitação.
apiproduct.{custom_attrib_name}* Qualquer atributo personalizado derivado do perfil de produto da API.
apiproduct.developer.quota.limit* O limite de cota definido no produto da API, se houver.
apiproduct.developer.quota.interval* O intervalo de cota definido no produto da API, se houver.
apiproduct.developer.quota.timeunit* A unidade de tempo de cota definida no produto da API, se houver.
* As variáveis ​​de produto da API são preenchidas automaticamente se os produtos da API estiverem configurados com ambiente, proxies e recursos válidos (derivados de proxy.pathsuffix ). Para obter instruções sobre como configurar produtos da API, consulte Gerenciando produtos da API .

Variáveis ​​de fluxo do aplicativo

As seguintes variáveis ​​de fluxo contendo informações sobre o aplicativo são preenchidas pela política. Todas essas variáveis ​​são prefixadas por:

verifyapikey.{policy_name}.app .

Por exemplo:

verifyapikey.{policy_name}.app.name

As variáveis ​​disponíveis incluem:

Variável Descrição
name O nome do aplicativo.
id O ID do aplicativo.
accessType Não utilizado pela Apigee.
callbackUrl URL de retorno do aplicativo. Normalmente usada apenas para OAuth.
DisplayName Nome de exibição do aplicativo.
status O status do aplicativo, como "aprovado" ou "revogado".
apiproducts Uma matriz contendo a lista de produtos de API associados ao aplicativo.
appFamily Qualquer família de aplicativos que contenha o aplicativo, ou "padrão".
appParentStatus O status do pai do aplicativo, como 'ativo' ou 'inativo'
appType O tipo de aplicativo é "Desenvolvedor".
appParentId O ID do aplicativo pai.
created_at A data/hora em que o aplicativo foi criado.
created_by O endereço de e-mail do desenvolvedor que criou o aplicativo.
last_modified_at A data/hora em que o aplicativo foi atualizado pela última vez.
last_modified_by O endereço de e-mail do desenvolvedor que atualizou o aplicativo pela última vez.
{app_custom_attributes} Qualquer atributo personalizado do aplicativo. Especifique o nome do atributo personalizado.

Variáveis ​​de fluxo do AppGroup

As seguintes variáveis ​​de fluxo contendo informações sobre os AppGroups são preenchidas pela política. Esses atributos do AppGroup são preenchidos somente se verifyapikey.{policy_name}.app.appType for "AppGroup".

Todas essas variáveis ​​são prefixadas por:

verifyapikey.{policy_name}.appgroup .

Por exemplo:

verifyapikey.{policy_name}.appgroup.name

As variáveis ​​disponíveis incluem:

Variável Descrição
name O nome do AppGroup.
id O ID do AppGroup.
displayName O nome de exibição do AppGroup.
appOwnerStatus O status do proprietário do aplicativo: 'ativo', 'inativo' ou 'login_lock'.
created_at O registro de data/hora em que o AppGroup foi criado.
created_by O endereço de e-mail do desenvolvedor que criou o AppGroup.
last_modified_at O registro de data/hora em que o AppGroup foi modificado pela última vez.
last_modified_by O endereço de e-mail do desenvolvedor que modificou o AppGroup pela última vez.
{appgroup_custom_attributes} Qualquer atributo personalizado do AppGroup. Especifique o nome do atributo personalizado.

Variáveis ​​de fluxo do desenvolvedor

As seguintes variáveis ​​de fluxo contendo informações sobre o desenvolvedor são preenchidas pela política. Todas essas variáveis ​​são prefixadas por:

verifyapikey.{policy_name}.developer

Por exemplo:

verifyapikey.{policy_name}.developer.id

As variáveis ​​disponíveis incluem:

Variável Descrição
id Retorna {org_name}@@@{developer_id}
userName Nome de usuário do desenvolvedor.
firstName Primeiro nome do desenvolvedor.
lastName Sobrenome do desenvolvedor.
email Endereço de e-mail do desenvolvedor.
status O status do desenvolvedor, como ativo, inativo ou login_lock.
apps Uma série de aplicativos associados ao desenvolvedor.
created_at O registro de data/hora em que o desenvolvedor foi criado.
created_by O endereço de e-mail do usuário que criou o desenvolvedor.
last_modified_at O registro de data/hora em que o desenvolvedor foi modificado pela última vez.
last_modified_by O endereço de e-mail do usuário que modificou o desenvolvedor.
{developer_custom_attributes} Qualquer atributo personalizado do desenvolvedor. Especifique o nome do atributo personalizado.
Código de falha Status HTTP Causa
keymanagement.service.consumer_key_missing_api_product_association 400

A credencial do aplicativo não possui uma associação de produto de API. Associe o aplicativo da chave a um produto de API. Observe que isso se aplica a todos os tipos de aplicativos, como aplicativos de desenvolvedor e aplicativos do AppGroup.

keymanagement.service.DeveloperStatusNotActive 401

O desenvolvedor que criou o aplicativo de desenvolvedor que contém a chave de API que você está usando está com o status inativo. Quando o status de um desenvolvedor de aplicativo é definido como inativo, todos os aplicativos de desenvolvedor criados por ele são desativados. Um usuário administrador com as permissões apropriadas (como o Administrador da Organização) pode alterar o status de um desenvolvedor das seguintes maneiras:

keymanagement.service.invalid_client-app_not_approved 401 O aplicativo de desenvolvedor associado à chave de API foi revogado. Um aplicativo revogado não pode acessar nenhum produto de API e não pode invocar nenhuma API gerenciada pela Apigee. Um administrador da organização pode alterar o status de um aplicativo de desenvolvedor usando a API da Apigee. Consulte Gerar par de chaves ou atualizar o status do aplicativo de desenvolvedor .
oauth.v2.FailedToResolveAPIKey 401 A política espera encontrar a chave de API em uma variável especificada no elemento <APIKey> da política. Este erro ocorre quando a variável esperada não existe (não pode ser resolvida).
oauth.v2.InvalidApiKey 401 A Apigee recebeu uma chave de API, mas ela é inválida. Quando a Apigee pesquisa a chave em seu banco de dados, ela precisa corresponder exatamente à que foi enviada na solicitação. Se a API funcionava anteriormente, verifique se a chave não foi regenerada. Se a chave foi regenerada, você verá este erro ao tentar usar a chave antiga. Para obter mais detalhes, consulte Como controlar o acesso às suas APIs registrando aplicativos .
oauth.v2.InvalidApiKeyForGivenResource 401 A Apigee recebeu uma chave de API e ela é válida; no entanto, ela não corresponde a uma chave aprovada no aplicativo do desenvolvedor associado ao seu proxy de API por meio de um produto.

Erros de implantação

Esses erros podem ocorrer quando você implanta um proxy contendo esta política.

Nome do erro Causa
SpecifyValueOrRefApiKey O elemento <APIKey> não tem um valor ou chave especificado.

Variáveis ​​de falha

Essas variáveis ​​são definidas quando ocorre um erro de tempo de execução. Para obter mais informações, consulte O que você precisa saber sobre erros de política .

Variáveis Onde Exemplo
fault.name=" fault_name " fault_name é o nome da falha, conforme listado na tabela de erros de tempo de execução acima. O nome da falha é a última parte do código da falha. fault.name Matches "FailedToResolveAPIKey"
oauthV2. policy_name .failed policy_name é o nome especificado pelo usuário da política que gerou a falha. oauthV2.VK-VerifyAPIKey.failed = true

Respostas de erro de exemplo

{  
   "fault":{  
      "faultstring":"Invalid ApiKey",
      "detail":{  
         "errorcode":"oauth.v2.InvalidApiKey"
      }
   }
}
{  
   "fault":{  
      "detail":{  
         "errorcode":"keymanagement.service.DeveloperStatusNotActive"
      },
      "faultstring":"Developer Status is not Active"
   }
}

Exemplo de regra de falha

<FaultRule name="FailedToResolveAPIKey">
    <Step>
        <Name>AM-FailedToResolveAPIKey</Name>
    </Step>
    <Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition>
</FaultRule>