Solicita tokens de acceso y códigos de autorización

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

En este tema, te mostramos cómo solicitar tokens de acceso y códigos de autorización, configurar extremos de OAuth 2.0 y configurar políticas para cada tipo de subvención admitido.

Código de muestra

Para tu comodidad, las políticas y los endpoints que se analizan en este tema están disponibles en GitHub en el proyecto oauth-doc-examples en el repositorio api-platform-samples de Apigee. Puedes implementar el código de muestra e intentar las solicitudes de ejemplo que aparecen en este tema. Consulta el archivo README del proyecto para obtener más detalles.

Solicitud de un token de acceso: tipo de otorgamiento de código de autorización

En esta sección, se explica cómo solicitar un token de acceso mediante el flujo de tipo de otorgamiento de código de autorización. Para ver una introducción a los tipos de otorgamiento de OAuth 2.0, consulta Introducción a OAuth 2.0.

Solicitud de muestra

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -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 especificarse en el cuerpo de la solicitud (como se muestra en el ejemplo anterior); Sin embargo, es posible cambiar este valor predeterminado configurar <GrantType>, <Code> y <RedirectUri> elementos de la política OAuthV2 que se adjunta a este extremo /accesstoken. Para averiguar detalles, consulta política OAuthV2.

  • grant_type: debe configurarse con el valor authorization_code.
  • código: El código de autorización que se recibió de /authorize final (o el nombre que elijas). Para solicitar un token de acceso en la autorización de otorgamiento de código, primero debes obtener un código de autorización. Consulte Cómo solicitar códigos de autorización a continuación. Consulta también Implementación de el tipo de otorgamiento de código de autorización.
  • redirect_uri: Debe proporcionar este parámetro si el elemento El parámetro redirect_uri se incluyó en la solicitud de código de autorización previa. Si No se incluyó el parámetro redirect_uri en la solicitud de código de autorización. si no proporcionas este parámetro, esta política usa el valor de la URL de devolución de llamada que se proporcionó cuando se registró la app del desarrollador.

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.

Autenticación

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autenticación básica (codificado en Base64) o como parámetros de forma client_id y client_secret. Tú obtén estos valores de una app de desarrollador registrada. Consulta también "Codificación básica credenciales de autenticación”.

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

Solicita un token de acceso: client tipo de otorgamiento de credenciales

En esta sección, se explica cómo solicitar un token de acceso mediante el flujo de tipo de otorgamiento de credenciales de cliente. Para ver una introducción a los tipos de otorgamiento de OAuth 2.0, consulta Introducción a OAuth 2.0.

Solicitud de muestra

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

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Parámetros obligatorios

De forma predeterminada, el parámetro allow_type obligatorio debe ser x-www-form-urlencoded y especificadas en el cuerpo de la solicitud (como se muestra en el ejemplo anterior); Sin embargo, es posible cambiar esta acción predeterminada configurando el elemento <GrantType> en la política OAuthV2 que está conectado a este extremo /accesstoken. 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.

  • grant_type: debe configurarse con el valor client_credentials.

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.

Autenticación

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autenticació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 "Codificación de credenciales de autenticación básicas".

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

Solicitud de un token de acceso: Tipo de otorgamiento de contraseña

En esta sección, se explica cómo solicitar un token de acceso mediante el flujo de tipo de otorgamiento de credenciales de contraseña (contraseña) del propietario del recurso. Para ver una introducción a los tipos de otorgamiento de OAuth 2.0, consulta Introducción a OAuth 2.0.

Para obtener más información sobre el tipo de otorgamiento de contraseña, incluido un video de 4 minutos que muestra cómo para implementarla, consulta Cómo implementar la contraseña tipo de otorgamiento.

Solicitud de muestra

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

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST https://docs-test.apigee.net/oauth/token \
  -d 'grant_type=password&username=the-user-name&password=the-users-password'

Parámetros obligatorios

De forma predeterminada, estos parámetros deben ser x-www-form-urlencoded y especificarse en el cuerpo de la solicitud (como se muestra en el ejemplo anterior); Sin embargo, es posible cambiar este valor predeterminado configurar <GrantType>, <Username> y <Password> elementos de la política OAuthV2 que se adjunta a este extremo /token. Para averiguar detalles, consulta política 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.

Autenticación

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autenticació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 "Codificación de credenciales de autenticación básicas".

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

Solicitud de un token de acceso: otorgamiento implícito tipo

En esta sección, se explica cómo solicitar un token de acceso usando el flujo de tipo de concesión implícito. Para una introducción a los tipos de otorgamiento de OAuth 2.0; consulta Introducción a OAuth 2.0.

Solicitud de muestra

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&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.

Autenticación

El otorgamiento implícito no requiere autenticación básica. Debes pasar un ID de cliente como request, como se explica aquí.

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

Solicita un código de autorización

Si usas el flujo de tipo de otorgamiento de código de autorización, debes obtener una autorización. código antes de solicitar un token de acceso.

Solicitud de muestra

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

en la que se adjunta una política OAuthV2 GenerateAuthorizationCode Extremo del proxy /oauth/authorize (consulta el extremo de muestra a continuación).

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 /authorize. Para obtener más detalles, consulta la Política de OAuthV2.

  • 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 Edge envía el código de Auth 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.

Authentication

No requiere autenticación básica; sin embargo, se debe usar el ID de cliente de la app cliente registrada que deberá suministrarse en la solicitud.

Extremo de muestra

Este es un ejemplo de configuración de extremo para generar un código de autorización:


<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Política de muestra

Esta es una política básica de GenerateAuthorizationCode. Obtén más información sobre la configuración opcional que puedes configurar con esta política, consulta la política 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.

Para solicitar un token de acceso nuevo a través de un token de actualización, haz lo siguiente:

Solicitud de muestra

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

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

Parámetros obligatorios

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

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.

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.

Authentication

  • client_id
  • client_secret

Debes pasar el ID de cliente y el secreto del cliente como un encabezado de autenticación básica (codificado en Base64) o como parámetros de forma client_id y client_secret. Consulta también "Cómo codificar credenciales de autenticación básicas".

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 autorización, se recomienda que recomienda la especificación OAuth 2.0 para pasar los valores client_id y client_secret como un encabezado de autenticación básica HTTP, 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 este ejemplo, ns4fQc14Zg4hKFCNaSzArVuwszX95X es el client_id y ZIjFyTsNgQNyxI es el secreto del cliente.

Sin importar el lenguaje de programación que uses para calcular el valor codificado en base64, para aquellos dadas las credenciales de cliente, el resultado codificado en base64 es el siguiente: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

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

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

La utilidad curl creará el encabezado HTTP básico por ti, si lo usas con la opción -u. Lo siguiente equivale a lo anterior:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Otros entornos de programación pueden tener atajos similares que generan automáticamente las encabezado con codificación base64.

Hash de tokens en la base de datos

Para proteger el acceso de OAuth y los tokens de actualización en caso de una violación de la seguridad de la base de datos, puedes hacer lo siguiente: habilitar el hash automático de tokens en tu organización de Edge. Cuando la función está habilitada, Edge crea automáticamente una versión con hash de los tokens de acceso y actualización de OAuth recién generados mediante el algoritmo que especifiques. (Se sigue la información sobre la codificación hash en tokens existentes). El Los tokens sin hash se usan en las llamadas a las APIs y Edge los valida en comparación con las versiones con hash la base de datos.

Las siguientes propiedades a nivel de la organización controlan el hash de token de OAuth.

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Si tienes tokens con hash existentes y quieres conservarlos hasta que venzan, configura la propiedades siguientes en tu organización, donde el algoritmo de hash coincide con el algoritmo (por ejemplo, SHA1, el valor predeterminado anterior de Edge). Si no se agregó un hash a los tokens, usa PLAIN.

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Si eres cliente de Edge Cloud, comunícate con el equipo de asistencia de Apigee Edge para establecer estas en tu organización y, de forma opcional, generar un hash de forma masiva para los tokens existentes.

Temas relacionados