Obtén tokens de OAuth 2.0

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En este documento, se muestra cómo obtener tokens de autorización y tokens de acceso de OAuth 2.0 con la API de Apigee. También mostramos cómo crear políticas para cada tipo de otorgamiento de OAuth 2.0 y configurar los extremos del proxy de modo que acepten solicitudes de clientes.

Usa el tipo de otorgamiento de código de autorización

En esta sección, se explica cómo obtener un token de acceso mediante el flujo de tipo de otorgamiento de código de autorización. La solicitud de token para este flujo requiere un código de autorización. Consulta Obtén un código de autorización. Consulta también Qué son los tipos de otorgamiento de OAuth 2.0.

Solicitud de muestra

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 obligatorios

De forma predeterminada, estos parámetros deben ser x-www-form-urlencoded y especificados en el cuerpo de la solicitud (como se muestra en el ejemplo anterior). Sin embargo, es posible cambiar este valor predeterminado si configuras los elementos <GrantType>, <Code> y <RedirectUri> en la política de OAuthV2. Consulta la política de OAuthV2.

  • grant_type: debe configurarse con el valor authorization_code.
  • code: es el código de autorización. Consulta Solicita un código de autorización.
  • redirect_uri: debes proporcionar este parámetro si el parámetro redirect_uri se incluyó en la solicitud de código de autorización. Si el parámetro redirect_uri no se incluyó en la solicitud del código de autorización y, si no lo proporcionas, en esta política se usa el valor de la URL de devolución de llamada que se proporciona en la app para desarrolladores registrada.

Parámetros opcionales

  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autorización básica (codificado en Base64) o como los parámetros de formulario client_id y client_secret. Estos valores se obtienen de una app de desarrollador registrada. Consulta también Codifica las credenciales de autenticación básica.

Extremo de muestra

A continuación, se muestra una configuración de extremo de muestra para generar un token de acceso. Ejecutará la política GenerateAccessToken, que debe configurarse para admitir el tipo de otorgamiento de 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 muestra

Esta es una política básica de GenerateAccessToken que se configura para aceptar el tipo de otorgamiento authorization_code. Para obtener información sobre los elementos de configuración opcionales que puedes configurar con esta política, consulta Política de OAuthV2.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Qué muestra

Con <GenerateResponse> habilitado, la política muestra una respuesta JSON que incluye el token de acceso, como se muestra a continuación. El tipo de concesión authorization_code crea un token de acceso y tokens de actualización, por lo que una respuesta podría verse de la siguiente manera:

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

Si <GenerateResponse> se establece como falso, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con la concesión de token de acceso.

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 ejemplo:

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

Usa el tipo de otorgamiento de credenciales de cliente

En esta sección, se explica cómo obtener un token de acceso mediante el flujo de tipo de otorgamiento de credenciales de cliente. Consulta también Qué son los tipos de otorgamiento de OAuth 2.0.

Solicitud de muestra

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 obligatorios

  • grant_type: debe configurarse con el valor client_credentials.

    De forma predeterminada, el parámetro grant_type requerido debe ser x-www-form-urlencoded y especificado en el cuerpo de la solicitud (como se muestra en el ejemplo anterior). Sin embargo, es posible cambiar este valor predeterminado si configuras el elemento <GrantType> en la política de OAuthV2. Por ejemplo, puedes optar por pasar el parámetro en un parámetro de búsqueda. Para obtener más detalles, consulta la Política de OAuthV2.

Parámetros opcionales

  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autorización básica (codificado en Base64) o como los parámetros de formulario client_id y client_secret. Obtén estos valores de la app de desarrollador registrada asociada a la solicitud. Consulta también Codifica las credenciales de autenticación básica.

Extremo de muestra

A continuación, se muestra una configuración de extremo de muestra para generar un token de acceso. Ejecutará la política GenerateAccessToken, que debe configurarse para admitir el tipo de otorgamiento 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 muestra

Esta es una política básica de GenerateAccessToken que se configura para aceptar el tipo de otorgamiento client_credentials. Para obtener información sobre los elementos de configuración opcionales que puedes configurar con esta política, consulta Política de OAuthV2.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Qué muestra

Cuando se habilita <GenerateResponse>, la política muestra una respuesta JSON. Ten en cuenta que con el tipo de otorgamiento client_credentials, no se admiten tokens de actualización. Solo se crea un token de acceso. Por ejemplo:

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

Si <GenerateResponse> se establece como falso, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con la concesión de token de acceso.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

Por ejemplo:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

Usa el tipo de otorgamiento de contraseña

En esta sección, se explica cómo obtener un token de acceso mediante el flujo de tipo de otorgamiento de credenciales de contraseña (contraseña) del propietario del recurso. Consulta también Implementa el tipo de otorgamiento de contraseña. Consulta también Qué son los tipos de otorgamiento de OAuth 2.0.

Solicitud de muestra

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 obligatorios

De forma predeterminada, estos parámetros deben ser x-www-form-urlencoded y especificados en el cuerpo de la solicitud (como se muestra en el ejemplo anterior). Sin embargo, es posible cambiar este valor predeterminado si configuras los elementos <GrantType>, <Username> y <Password> en la política de OAuthV2. Consulta la política de OAuthV2.

Por lo general, las credenciales de usuario se validan en un almacén de credenciales mediante una política LDAP o JavaScript.

  • grant_type: debe configurarse con el valor password.
  • username: es el nombre de usuario del propietario del recurso.
  • password: es la contraseña del propietario del recurso.

Parámetros opcionales

  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autorización básica (codificado en Base64) o como los parámetros de formulario client_id y client_secret. Obtén estos valores de la app de desarrollador registrada asociada a la solicitud. Consulta también Codifica las credenciales de autenticación básica.

Extremo de muestra

A continuación, se muestra una configuración de extremo de muestra para generar un token de acceso. Ejecutará la política GenerateAccessToken, que debe configurarse para admitir el tipo de otorgamiento de contraseña.

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

Esta es una política básica de GenerateAccessToken que está configurada para aceptar el tipo de otorgamiento de contraseña. Para obtener información sobre los elementos de configuración opcionales que puedes configurar con esta política, consulta Política de 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>

Qué muestra

Cuando se habilita <GenerateResponse>, la política muestra una respuesta JSON. Ten en cuenta que, con el tipo de otorgamiento de contraseña, se acuña un token de acceso y un token de actualización. Por ejemplo:

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

Si <GenerateResponse> se establece como falso, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con la concesión de token de acceso.

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 ejemplo:

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

Usa el tipo de concesión implícito

En esta sección, se explica cómo obtener un token de acceso usando el flujo de tipo de concesión implícito. Consulta también Qué son los tipos de otorgamiento de OAuth 2.0.

Solicitud de muestra

$ 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 obligatorios

De forma predeterminada, estos parámetros deben ser parámetros de búsqueda (como se muestra en el ejemplo anterior). Sin embargo, es posible cambiar este valor predeterminado configurando los elementos <ResponseType>, <ClientId> y <RedirectUri> en la política de OAuthV2 que se adjunta a este /token. Para obtener más detalles, consulta la Política de OAuthV2.

Por lo general, las credenciales de usuario se validan en un almacén de credenciales mediante una política de texto destacado o de JavaScript de un servicio de LDAP.

  • response_type: se debe configurar con el valor token.
  • client_id: es el ID de cliente de una app para desarrolladores registrada.
  • redirect_uri: este parámetro es obligatorio si no se proporcionó un URI de devolución de llamada cuando se registró la app para desarrolladores del cliente. Si se proporcionó una URL de devolución de llamada en el registro del cliente, se comparará con este valor y debe coincidir exactamente.

Parámetros opcionales

  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

No requiere el encabezado de autorización. Sin embargo, debes pasar un ID de cliente como parámetro de solicitud.

Extremo de muestra

A continuación, se muestra una configuración de extremo de muestra para generar un token de acceso. Ejecutará la 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 muestra

Esta es una política básica de GenerateAccessTokenImplicitGrant que procesa solicitudes de token para el flujo de tipo de otorgamiento implícito. Para obtener información sobre los elementos de configuración opcionales que puedes configurar con esta política, consulta Política de OAuthV2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Qué muestra

Cuando se habilita <GenerateResponse>, la política muestra un redireccionamiento de ubicación 302 en el encabezado de respuesta. El redireccionamiento apunta a la URL especificada en el parámetro redirect_uri y se agrega con el token de acceso y la hora de vencimiento del token. Ten en cuenta que el tipo de otorgamiento implícito no es compatible con tokens de actualización. Por ejemplo:

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

Si <GenerateResponse> se establece como falso, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con la concesión de token de acceso.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

Por ejemplo:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

Obtener un código de autorización

En el flujo de tipo de otorgamiento de código de autorización, se requiere un código de autorización a fin de obtener un token de acceso. Consulta Usa el tipo de otorgamiento de código de autorización. Consulta también Qué son los tipos de otorgamiento de OAuth 2.0.

Solicitud de muestra

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 obligatorios

De forma predeterminada, estos parámetros deben ser parámetros de búsqueda (como se muestra en el ejemplo anterior). Sin embargo, es posible cambiar este valor predeterminado si configuras los elementos <ResponseType>, <ClientId> y <RedirectUri> en la política de OAuthV2. Para obtener más detalles, consulta la Política de OAuthV2.

  • redirect_uri: si se especifica un URI de devolución de llamada completo (no parcial) en la app cliente registrada, este parámetro es opcional; de lo contrario, es obligatorio. La devolución de llamada es la URL a la que Apigee envía el código de autenticación recién creado. Consulta también Registra apps y administra claves de API.
  • response_type: se debe configurar con el valor code.
  • client_id: es el ID de cliente de una app para desarrolladores registrada.

Parámetros opcionales

  • redirect_uri: si se especifica un URI de devolución de llamada completo (no parcial) en la app cliente registrada, este parámetro es opcional; de lo contrario, es obligatorio. La devolución de llamada es la URL a la que Apigee envía el código de autenticación recién creado. Consulta también Registra apps y administra claves de API.
  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

No requiere el encabezado de autorización. Sin embargo, se debe proporcionar el ID de cliente de la app cliente registrada en la solicitud.

Política de muestra

Esta es una política básica de GenerateAuthorizationCode. Para ver más opciones de configuración, consulta la Política de OAuthV2:

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Qué muestra

Cuando se habilita <GenerateResponse>, la política muestra el parámetro de búsqueda ?code a la ubicación redirect_uri (URI de devolución de llamada) con el código de autorización adjunto. Se envía a través de un redireccionamiento del navegador 302 con la URL en el encabezado Ubicación de la respuesta. Por ejemplo: ?code=123456.

Si <GenerateResponse> se establece como false, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con el código de autorización.

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

Por ejemplo:

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

Actualización de un token de acceso

Un token de actualización es una credencial que usas para obtener un token de acceso, generalmente después de que el token de acceso caduca o se vuelve no válido. Se muestra un token de actualización en la respuesta cuando recibes un token de acceso.

Solicitud de muestra

Para obtener información sobre la codificación del encabezado de autenticación básico en la siguiente llamada, consulta Codifica las credenciales de autenticación básicas.

$ 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 obligatorios

De forma predeterminada, la política busca estos parámetros como parámetros x-www-form-urlencoded especificados en el cuerpo de la solicitud, como se muestra en el ejemplo anterior. A fin de configurar una ubicación alternativa para estas entradas, puedes usar los elementos <GrantType> y <RefreshToken> en la política de OAuthV2. Para obtener más detalles, consulta la Política de OAuthV2.

  • grant_type: debe configurarse con el valor refresh_token.
  • refresh_token: es el token de actualización asociado con el token de acceso que deseas renovar.

Parámetros opcionales

  • estado: es una string que se enviará con la respuesta. Por lo general, se usa para evitar ataques de falsificación de solicitudes entre sitios.
  • scope: permite filtrar la lista de productos de API con los que se puede usar el token acuñado. Para obtener información detallada sobre el alcance, consulta Trabaja con alcances de OAuth2.

Autorización

No requiere el encabezado de autorización. Sin embargo, se debe proporcionar el ID de cliente de la app cliente registrada en la solicitud.

Cuando se actualiza un token de acceso, no se vuelve a autenticar el usuario.

A continuación, se muestra una configuración de extremo de muestra para generar un token de acceso con un token de actualización. Ejecuta la 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 muestra

Esta es una política básica de RefreshAccessToken que se configura para aceptar el tipo de otorgamiento refresh_token. Para obtener información sobre los elementos de configuración opcionales que puedes configurar con esta política, consulta Política de 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>

Qué muestra

Cuando se habilita <GenerateResponse>, la política muestra una respuesta JSON que contiene el token de acceso nuevo. El tipo de otorgamiento refresh_token admite la extracción de acceso y tokens de actualización nuevos. Por ejemplo:

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

Debes saber que, después de extraer un token de actualización nuevo, el original ya no es válido.

La respuesta anterior es lo que obtienes si <GenerateResponse> se establece como true. Si <GenerateResponse> se establece como falso, la política no muestra una respuesta. En su lugar, se propaga el siguiente conjunto de variables de flujo con datos relacionados con el otorgamiento del token de acceso.

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 ejemplo:

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

Codificación de credenciales de autenticación básica

Cuando realizas una llamada a la API para solicitar un token o un código de autenticación, se recomienda usar la especificación OAuth 2.0 para pasar los valores client_id y client_secret como encabezado de autorización HTTP básica, como se describe. en IETF RFC 2617. Para hacerlo, debes codificar los datos en Base64 como el resultado de la unión de los dos valores y dos puntos separados por dos puntos.

En seudocódigo:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

En el ejemplo anterior, ns4fQc14Zg4hKFCNaSzArVuwszX95X es client_id y ZIjFyTsNgQNyxI es el secreto del cliente.

Ejemplos

Este comando de ejemplo funciona en Linux y MacOS:

export CREDENTIALS=$(echo -n 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' | base64)

Luego, puedes realizar la solicitud del token de la siguiente manera:

$ 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"

Hash de tokens en la base de datos

Apigee genera un hash de todos los tokens de acceso y actualización de OAuth para protegerlos en caso de una violación de la seguridad en la base de datos. Usa tokens sin hash en las llamadas a la API y Apigee los valida con las versiones con hash de la base de datos.

Temas relacionados