Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Este documento mostra como obter códigos de autorização e tokens de acesso OAuth 2.0 com a API Apigee. Também mostramos como criar políticas para cada tipo de concessão OAuth 2.0 e configurar pontos finais de proxy para aceitar pedidos de clientes.
Use o tipo de concessão do código de autorização
Esta secção explica como obter um token de acesso através do fluxo do tipo de concessão de código de autorização. O pedido de token para este fluxo requer um código de autorização. Consulte o artigo Obtenha um código de autorização. Consulte também o artigo O que são tipos de concessão do OAuth 2.0.
Pedido de amostra
curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://apitest.acme.com/oauth/token' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
Parâmetros obrigatórios
Por predefinição, estes parâmetros têm de ser x-www-form-urlencoded
e especificados no corpo do pedido (conforme mostrado no exemplo acima). No entanto, é possível alterar esta predefinição configurando os elementos <GrantType>
, <Code>
e <RedirectUri>
na política OAuthV2. Consulte a política OAuthV2.
- grant_type: tem de ser definido com o valor
authorization_code
. - code: o código de autorização. Consulte o artigo Pedir um código de autorização.
- redirect_uri: tem de fornecer este parâmetro se o parâmetro
redirect_uri
tiver sido incluído no pedido de código de autorização. Se o parâmetroredirect_uri
não foi incluído no pedido de código de autorização e se não fornecer este parâmetro, esta política usa o valor do URL de retorno de chamada fornecido na app de programador registada.
Parâmetros opcionais
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Tem de transmitir o ID de cliente e o segredo do cliente como um cabeçalho de autorização básica (codificado em Base64) ou como parâmetros de formulário client_id
e client_secret
. Obtém estes valores a partir de uma app de programador registada. Consulte também o artigo Codificar credenciais de autenticação básica.
Ponto final de exemplo
Segue-se um exemplo da configuração do ponto final para gerar um token de acesso. Executa a política GenerateAccessToken, que tem de ser configurada para suportar o tipo de concessão authorization_code.
... <Flow name="generate-access-token"> <Description>Generate a token</Description> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Política de amostra
Esta é uma política GenerateAccessToken básica configurada para aceitar o tipo de autorização authorization_code
. Para informações sobre elementos de configuração opcionais que pode configurar com esta política, consulte a política OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve uma resposta JSON que
inclui o token de acesso, conforme apresentado abaixo. O tipo de concessão authorization_code
cria uma chave de acesso e chaves de atualização, pelo que uma resposta pode ter o seguinte aspeto:
{ "issued_at": "1420262924658", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420262924658", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi", "organization_name": "docs", "refresh_token_expires_in": "86399", //--in seconds "refresh_count": "0" }
Se <GenerateResponse>
estiver definido como falso, a política não devolve uma resposta. Em vez disso, preenche o seguinte conjunto de variáveis de fluxo com dados relativos à concessão do token de acesso.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Por exemplo:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
Use o tipo de concessão de credenciais de cliente
Esta secção explica como obter um token de acesso através do fluxo do tipo de concessão de credenciais do cliente. Consulte também o artigo O que são tipos de concessão do OAuth 2.0.
Pedido de amostra
curl -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"
Parâmetros obrigatórios
- grant_type: tem de ser definido com o valor
client_credentials
.Por predefinição, o parâmetro
grant_type
obrigatório tem de serx-www-form-urlencoded
e especificado no corpo do pedido (conforme mostrado no exemplo acima). No entanto, é possível alterar esta predefinição configurando o elemento<GrantType>
na política OAuthV2. Por exemplo, pode optar por transmitir o parâmetro num parâmetro de consulta. Para ver detalhes, consulte a política OAuthV2.
Parâmetros opcionais
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Tem de transmitir o ID de cliente e o segredo do cliente como um cabeçalho de autorização básico (codificado em Base64) ou como parâmetros de formulário client_id
e client_secret
. Obtém estes valores da app de programador registada
associada ao pedido. Veja também Codificar credenciais de autenticação básica.
Ponto final de exemplo
Segue-se um exemplo da configuração do ponto final para gerar um token de acesso. Executa a política GenerateAccessToken, que tem de ser configurada para suportar o tipo de concessão client_credentials.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Política de amostra
Esta é uma política GenerateAccessToken básica configurada para aceitar o tipo de autorização client_credentials
. Para informações sobre elementos de configuração opcionais que pode configurar com esta política, consulte a política OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve uma resposta JSON. Tenha em atenção que, com o tipo de autorização client_credentials
, os tokens de atualização não são suportados. Apenas
é gerada uma chave de acesso. Por exemplo:
{ "issued_at": "1420260525643", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav", "organization_name": "docs" }
Se <GenerateResponse>
estiver definido como falso, a política não devolve uma resposta. Em vez disso, preenche o seguinte conjunto de variáveis de fluxo com dados relativos à concessão do token de acesso.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Por exemplo:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Use o tipo de autorização de palavra-passe
Esta secção explica como obter um token de acesso através do fluxo do tipo de concessão de credenciais (palavra-passe) do proprietário do recurso. Consulte também o artigo Implementar o tipo de autorização de palavra-passe. Consulte também o artigo O que são tipos de concessão do OAuth 2.0.
Pedido de amostra
curl -v -k -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=password&username=a_username&password=a_password"
Parâmetros obrigatórios
Por predefinição, estes parâmetros têm de ser x-www-form-urlencoded
e especificados no corpo do pedido (conforme mostrado no exemplo acima). No entanto, é possível alterar esta predefinição configurando os elementos <GrantType>
, <Username>
e <Password>
na política OAuthV2. Consulte a política OAuthV2.
Normalmente, as credenciais do utilizador são validadas em relação a um repositório de credenciais através de uma política de LDAP ou JavaScript.
- grant_type: tem de ser definido com o valor
password
. - username: o nome de utilizador do proprietário do recurso.
- password: a palavra-passe do proprietário do recurso.
Parâmetros opcionais
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Tem de transmitir o ID de cliente e o segredo do cliente como um cabeçalho de autorização básico (codificado em Base64) ou como parâmetros de formulário client_id
e client_secret
. Obtém estes valores da app de programador registada
associada ao pedido. Veja também Codificar credenciais de autenticação básica.
Ponto final de exemplo
Segue-se um exemplo da configuração do ponto final para gerar um token de acesso. Executa a política GenerateAccessToken, que tem de ser configurada para suportar o tipo de concessão de palavra-passe.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Política de amostra
Esta é uma política GenerateAccessToken básica configurada para aceitar o tipo de concessão de palavra-passe. Para informações sobre os elementos de configuração opcionais que pode configurar com esta política, consulte a política OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve uma resposta JSON. Tenha em atenção que, com o tipo de concessão de palavra-passe, é gerada uma chave de acesso e uma chave de atualização. Por
exemplo:
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "0" }
Se <GenerateResponse>
estiver definido como falso, a política não devolve uma resposta. Em vez disso, preenche o seguinte conjunto de variáveis de fluxo com dados relativos à concessão do token de acesso.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Por exemplo:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
Use o tipo de concessão implícita
Esta secção explica como obter um token de acesso através do fluxo do tipo de concessão implícito. Consulte também o artigo O que são tipos de concessão do OAuth 2.0.
Pedido de amostra
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://apitest.acme.com/oauth/implicit?response_type=token&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://callback-example.com'
Parâmetros obrigatórios
Por predefinição, estes parâmetros têm de ser parâmetros de consulta (conforme mostrado no exemplo acima); no entanto,
é possível alterar esta predefinição configurando os elementos <ResponseType>
,
<ClientId>
e <RedirectUri>
na política OAuthV2
anexada a este ponto final /token
. Para ver detalhes, consulte a política OAuthV2.
Normalmente, as credenciais do utilizador são validadas em relação a um repositório de credenciais através de um apelo LDAP ou de uma política de JavaScript.
- response_type: tem de ser definido com o valor
token
. - client_id: o ID de cliente de uma app de programador registada.
- redirect_uri: este parâmetro é obrigatório se não tiver sido fornecido um URI de retorno de chamada quando a app do programador cliente foi registada. Se tiver sido fornecido um URL de retorno de chamada no registo do cliente, este será comparado com este valor e tem de corresponder exatamente.
Parâmetros opcionais
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Não requer o cabeçalho de autorização. No entanto, tem de transmitir um ID de cliente como um parâmetro de pedido.
Ponto final de exemplo
Segue-se um exemplo da configuração do ponto final para gerar um token de acesso. Executa a política GenerateAccessTokenImplicitGrant.
... <Flow name="generate-access-token-implicit"> <Request> <Step> <Name>GenerateAccessTokenImplicitGrant</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition> </Flow> ...
Política de amostra
Esta é uma política GenerateAccessTokenImplicitGrant básica que processa pedidos de tokens para o fluxo do tipo de concessão implícita. Para informações sobre elementos de configuração opcionais que pode configurar com esta política, consulte a política OAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="GenerateAccessTokenImplicit"> <DisplayName>GenerateAccessTokenImplicit</DisplayName> <Operation>GenerateAccessTokenImplicitGrant</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve um redirecionamento de localização 302 no cabeçalho da resposta. O redirecionamento aponta para o URL especificado no parâmetro redirect_uri
e é anexado com a chave de acesso e o tempo de expiração da chave. Tenha em atenção que o tipo de autorização implícito não suporta tokens de atualização. Por exemplo:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
Se <GenerateResponse>
estiver definido como falso, a política não devolve uma resposta. Em vez disso, preenche o seguinte conjunto de variáveis de fluxo com dados relativos à concessão do token de acesso.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Por exemplo:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Obtenha um código de autorização
No fluxo do tipo de concessão do código de autorização, é necessário um código de autorização para obter uma chave de acesso. Consulte o artigo Use o tipo de concessão do código de autorização. Consulte também o artigo O que são tipos de concessão do OAuth 2.0.
Pedido de amostra
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://apitest.acme.com/oauth/authorize?response_type=code&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://my-callback.com"
Parâmetros obrigatórios
Por predefinição, estes parâmetros têm de ser parâmetros de consulta (conforme mostrado no exemplo acima); no entanto,
é possível alterar esta predefinição configurando os elementos <ResponseType>
,
<ClientId>
e <RedirectUri>
na política OAuthV2. Para ver detalhes, consulte a política OAuthV2.
- redirect_uri: se for especificado um URI de retorno de chamada completo (não parcial) na app cliente registada, este parâmetro é opcional; caso contrário, é obrigatório. O callback é o URL para onde o Apigee envia o código de autorização recém-criado. Consulte também o artigo Registe apps e faça a gestão das chaves da API.
- response_type: tem de ser definido com o valor
code
. - client_id: o ID de cliente de uma app de programador registada.
Parâmetros opcionais
- redirect_uri: se for especificado um URI de retorno de chamada completo (não parcial) na app cliente registada, este parâmetro é opcional; caso contrário, é obrigatório. O callback é o URL para onde o Apigee envia o código de autorização recém-criado. Consulte também o artigo Registe apps e faça a gestão das chaves da API.
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Não requer o cabeçalho de autorização. No entanto, o ID de cliente da app cliente registada tem de ser fornecido no pedido.
Política de amostra
Esta é uma política GenerateAuthorizationCode básica. Para mais opções de configuração, consulte a política OAuthV2:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve o parâmetro de consulta ?code
à localização redirect_uri
(URI de retorno de chamada) com o código de autorização
anexado. É enviado através de um redirecionamento do navegador 302 com o URL no cabeçalho Location da resposta. Por exemplo: ?code=123456
.
Se <GenerateResponse>
estiver definido como false
, a política não devolve uma resposta. Em alternativa, preenche o seguinte conjunto de variáveis de fluxo com dados relativos ao código de autorização.
oauthv2authcode.{policy-name}.code oauthv2authcode.{policy-name}.scope oauthv2authcode.{policy-name}.redirect_uri oauthv2authcode.{policy-name}.client_id
Por exemplo:
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
Atualizar uma chave de acesso
Um token de atualização é uma credencial que usa para obter um token de acesso, normalmente depois de o token de acesso ter expirado ou se tornar inválido. Uma chave de atualização é devolvida na resposta quando recebe uma chave de acesso.
Pedido de amostra
Para obter informações sobre a codificação do cabeçalho de autenticação básica na seguinte chamada, consulte o artigo Codificar credenciais de autenticação básica.
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ https://apitest.acme.com/oauth/refresh \ -d "grant_type=refresh_token&refresh_token=yVSL38WpuN3Kzn1UTMoE6AQ4ANZM"
Parâmetros obrigatórios
Por predefinição, a política procura estes parâmetros x-www-form-urlencoded
especificados no corpo do pedido, conforme mostrado no exemplo acima. Para configurar uma localização alternativa
para estas entradas, pode usar os elementos <GrantType>
e
<RefreshToken>
na política OAuthV2. Para ver detalhes, consulte a política OAuthV2.
- grant_type: tem de ser definido com o valor
refresh_token
. - refresh_token: o token de atualização associado ao token de acesso que quer renovar.
Parâmetros opcionais
- state: uma string que será enviada de volta com a resposta. Normalmente usado para impedir ataques de falsificação em pedidos entre sites.
- scope: permite-lhe filtrar a lista de produtos de API com os quais o token gerado pode ser usado. Para informações detalhadas sobre o âmbito, consulte o artigo Trabalhar com âmbitos do OAuth2.
Autorização
Não requer o cabeçalho de autorização. No entanto, o ID de cliente da app cliente registada tem de ser fornecido no pedido.
Quando atualiza uma chave de acesso, não existe uma nova autenticação do utilizador.
Segue-se um exemplo de configuração do ponto final para gerar um token de acesso através de um token de atualização. Executa a política RefreshAccessToken.
... <Flow name="generate-refresh-token"> <Request> <Step> <Name>RefreshAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition> </Flow> ...
Política de amostra
Esta é uma política RefreshAccessToken básica configurada para aceitar o tipo de autorização refresh_token
. Para informações sobre elementos de configuração opcionais que pode configurar com esta política, consulte a política OAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="RefreshAccessToken"> <Operation>RefreshAccessToken</Operation> <GenerateResponse enabled="true"/> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> </OAuthV2>
Devoluções
Com a opção <GenerateResponse>
ativada, a política devolve uma resposta JSON
com o novo token de acesso. O tipo de autorização refresh_token
suporta a geração de chaves de acesso e novos tokens de atualização. Por exemplo:
{ "issued_at": "1420301470489", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "refresh_token_issued_at": "1420301470489", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "token_type": "BearerToken", "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "2" }
Tenha em atenção que, depois de ser gerado um novo token de atualização, o original deixa de ser válido.
A resposta acima é o que recebe se <GenerateResponse>
estiver definido como verdadeiro.
Se <GenerateResponse>
estiver definido como falso, a política não devolve uma resposta.
Em vez disso, preenche o seguinte conjunto de variáveis de contexto (fluxo) com dados relativos à concessão do token de acesso.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Por exemplo:
oauthv2accesstoken.RefreshAccessToken.access_token oauthv2accesstoken.RefreshAccessToken.expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at oauthv2accesstoken.RefreshAccessToken.refresh_token_status
Codificação de credenciais de autenticação básica
Quando faz uma chamada da API para pedir um token ou um código de autorização, é uma boa prática e é recomendado pela especificação OAuth 2.0 transmitir os valores client_id e client_secret como um cabeçalho de autorização HTTP-Basic, conforme descrito no IETF RFC 2617. Para tal, tem de codificar em base64 o resultado da união dos dois valores com um dois pontos a separá-los.
Em pseudocódigo:
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))
Onde: ns4fQc14Zg4hKFCNaSzArVuwszX95X
é o client_id e
ZIjFyTsNgQNyxI
é o segredo do cliente.
Exemplos
Este comando de exemplo funciona no Linux e no MacOS:
export CREDENTIALS=$(echo -n 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' | base64)
Em seguida, pode fazer o pedido de token da seguinte forma:
$ curl -i -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic $CREDENTIALS" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=client_credentials"
Aplicação de hash aos tokens na base de dados
O Apigee aplica hash a todos os tokens de acesso e atualização do OAuth para os proteger em caso de uma violação de segurança da base de dados. Usa tokens não com hash em chamadas API e o Apigee valida-os em relação às versões com hash na base de dados.
Tópicos relacionados
- Implementar o tipo de concessão de credenciais de cliente
- Implementar o tipo de concessão do código de autorização
- Curso online de segurança de APIs (inclui OAuth)
- Política OAuthV2: tem muitos exemplos que mostram como fazer pedidos ao servidor de autorização e como configurar a política OAuthV2.