Revogue chaves de acesso OAuth 2.0 por ID do utilizador final, ID da app ou ambos

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Pode revogar os tokens de acesso OAuth 2.0 por ID do utilizador final, ID da app ou ambos através da política RevokeOAuthV2. Por utilizador final, referimo-nos ao utilizador da app que está a chamar a API.

Quando armazenar o User-ID num token de acesso

Por predefinição, os IDs de utilizadores não são incluídos nos tokens de acesso. Por vezes, é útil armazenar o ID do utilizador num token de acesso. Por exemplo:

  • Uma funcionalidade para o seu Website ou app onde os utilizadores podem ver as apps de terceiros que autorizaram e uma opção para revogar o acesso a essas apps.
  • Uma funcionalidade que permite a um utilizador autorizado revogar todas as chaves de acesso associadas a uma app de programador específica.

Acerca das chaves de acesso OAuth

Por predefinição, quando o Apigee gera uma chave de acesso OAuth 2.0, a chave tem o formato apresentado abaixo:

{
 "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"
}

Tenha em conta o seguinte:

  • O campo application_name contém o UUID da app associada ao token. Se ativar a revogação de chaves de acesso OAuth 2.0 por ID da app, este é o ID da app que usa.
  • O campo access_token contém o valor da chave de acesso OAuth 2.0.
  • Não existe nenhum campo para o ID do utilizador final no token de acesso OAuth predefinido.

Para revogar chaves de acesso OAuth 2.0 por ID do utilizador final, tem de configurar a política OAuth 2.0 para incluir o ID do utilizador na chave. Depois de configurar a política para incluir o ID do utilizador final no token, este é incluído como o campo app_enduser, conforme mostrado abaixo:

{
 "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"
}

Configurar as políticas

Para revogar tokens por ID do utilizador, primeiro tem de configurar a política OAuth 2.0 para adicionar o ID do utilizador ao token de acesso. Ao incluir IDs de utilizadores finais em tokens de acesso, pode revogar tokens por ID de utilizador final.

Para configurar a política de modo a incluir um ID do utilizador final num token de acesso, tem de especificar a variável de entrada que contém o ID do utilizador final. Use a etiqueta <AppEndUser> para especificar a variável:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
  <DisplayName>OAuth 2.0.0 1</DisplayName>
  <ExternalAuthorization>false</ExternalAuthorization>
  <Operation>GenerateAccessToken</Operation>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
  <GrantType>request.queryparam.grant_type</GrantType>
  <AppEndUser>request.header.appuserID</AppEndUser>
  <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Segue-se um exemplo de uma política de RevokeOAuthV2 configurada para revogar o acesso por EndUserId:

<?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>
    <EndUserId ref="request.header.appuserID"></EndUserId>
    <Cascade>false</Cascade>
</RevokeOAuthV2>

Consulte também a Política de Revogação do OAuth V2.

O comando de exemplo seguinte gera um token e transmite o ID do utilizador no cabeçalho appuserID:

curl -H "appuserID:6ZG094fgnjNf02EK" \
-H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Pode transmitir informações como parte de um pedido de outras formas. Por exemplo, em alternativa, pode:

  • Use uma variável de parâmetro de formulário: request.formparam.appuserID
  • Use uma variável de fluxo que forneça o ID do utilizador final