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ámetroredirect_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
- Implementa el tipo de otorgamiento de credenciales de cliente
- Cómo implementar el tipo de otorgamiento de código de autorización
- Curso en línea sobre seguridad de API (incluye OAuth)
- Política de OAuthV2: Tiene muchos ejemplos que muestran cómo realizar solicitudes al servidor de autorización y cómo configurar la política de OAuthV2.