Obtenha tokens OAuth 2.0

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âmetro redirect_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 ser x-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