Revogar tokens de acesso do OAuth 2.0 por ID do usuário final, ID do aplicativo ou ambos

Esta página se aplica à Apigee e à Apigee híbrida.

Confira a documentação da Apigee Edge.

É possível revogar tokens de acesso do OAuth 2.0 por ID do usuário final, ID do aplicativo ou ambos usando a política RevokeOAuthV2. O usuário final significa o usuário do aplicativo que está chamando a API.

Quando armazenar o User ID em um token de acesso

Por padrão, os códigos de usuário não são incluídos nos tokens de acesso. Às vezes, é útil armazenar o ID do usuário em um token de acesso. Por exemplo:

  • Um recurso do seu site ou app em que os usuários podem ver quais apps de terceiros autorizaram e fornecer uma opção para revogar o acesso a esses apps.
  • Um recurso que permite que um usuário autorizado revogue todos os tokens de acesso associados a um app do desenvolvedor específico.

Sobre os tokens de acesso do OAuth

Por padrão, quando a Apigee gera um token de acesso do OAuth 2.0, ele tem o seguinte formato:

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

Observe o seguinte:

  • O campo application_name contém o UUID do app associado ao token. Se você ativar a revogação de tokens de acesso do OAuth 2.0 por ID do aplicativo, este será o ID do aplicativo que você usa.
  • O campo access_token contém o valor do token de acesso do OAuth 2.0.
  • Não há nenhum campo para o ID do usuário final no token de acesso padrão do OAuth.

Para revogar os tokens de acesso do OAuth 2.0 por ID do usuário final, configure a política do OAuth 2.0 de modo a incluir o User ID no token. Depois de configurar a política para incluir o ID do usuário final no token, ele será incluído como o campo app_enduser, como 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"
}

Como configurar as políticas

Para revogar os tokens por User ID, primeiro configure a política do OAuth 2.0 para adicionar o User ID ao token de acesso. Ao incluir IDs de usuário em tokens de acesso, você poderá revogar tokens por ID de usuário final.

Para configurar a política para incluir um ID de usuário final em um token de acesso, especifique a variável de entrada que contém o ID do usuário final. Use a tag <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>

Este é um exemplo de política RevokeOAuthV2 configurada para ser revogada 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 Revogar a política do OAuth V2.

O comando de exemplo a seguir gera um token e transmite o ID do usuário 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"

É possível transmitir informações como parte de uma solicitação de outras maneiras. Por exemplo, como alternativa, você pode:

  • Use uma variável de parâmetro de formulário: request.formparam.appuserID
  • Usar uma variável de fluxo que fornece o ID do usuário final