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