Obtener Access Token
Aprende a utilizar los flujos, también conocidos como grant types, para obtener un Access Token y acceder a los datos expuestos por una API. Estos flujos responden a todos los escenarios de negocios que pueden aparecer en el consumo de APIs con base en el tipo de aplicación consumidora, su grado de confianza y cómo es la interacción del usuario en el proceso.
Los flujos de acceso disponibles para la generaciĂłn del Access Token son:
- Authorization code: se van a usar credenciales para acceder a un recurso a nombre de un tercero.
- Client credentials: se van a usar credenciales para acceder a un recurso en nombre propio.
Authorization code
Este flujo se caracteriza por la intervenciĂłn del vendedor para autorizar explĂcitamente el acceso de la aplicaciĂłn a sus datos, y por el uso de un cĂłdigo otorgado por el servidor de autenticaciĂłn para que la aplicaciĂłn pueda obtener un Access Token y un refresh token asociado.
Como se trata de un flujo basado en la redirecciĂłn, debes permitir la interacciĂłn con el navegador del vendedor y recibir el request
a través de la redirección del servidor de autorización. En este flujo, la aplicación solicita al vendedor el consentimiento expreso para acceder a los datos mediante la apertura de una pågina web, en la que se explicitan los åmbitos para los que se solicita el acceso.
Una vez autorizado, el servidor genera un código de acceso que llega a la aplicación a través de una redirección. En este paso, la aplicación solicita acceso al servidor de autenticación enviando el código obtenido y sus datos. Una vez hecho esto, el servidor otorga el Access Token y el refresh token a la aplicación.
Mira a continuaciĂłn cĂłmo configurar el protocolo PKCE (un protocolo de seguridad no obligatorio que brinda una capa de protecciĂłn extra, por lo que es recomendado) y luego generar el Access Token.
Configurar PKCE
El PKCE (Proof Key for Code Exchange) es un protocolo de seguridad utilizado con OAuth para proteger contra ataques de cĂłdigo malicioso durante el intercambio de cĂłdigos de autorizaciĂłn por Access Token. Añade una capa adicional de seguridad generando un verifier que se transforma en un challenge para asegurar que, incluso si el cĂłdigo de autorizaciĂłn es interceptado, no sea Ăștil sin el verifier original.
Siga los pasos a continuaciĂłn para habilitar y configurar el uso del flujo de cĂłdigo de autorizaciĂłn con PKCE.
- Primero, en la pantalla de Detalles de la aplicaciĂłn, haz clic en Editar y habilite el uso del flujo de cĂłdigo de autorizaciĂłn con PKCE. Con el campo habilitado, Mercado Pago comenzarĂĄ a requerir como obligatorios los campos
code_challenge
ycode_method
en las solicitudes de OAuth. - Los campos requeridos pueden generarse de varias formas, ya sea con desarrollo propio o mediante el uso de SDKs. Sigue los pasos necesarios descritos en esta documentaciĂłn oficial para hacerlo.
- Después de generar y cifrar los campos, serå necesario enviar los códigos respectivos a Mercado Pago a través de
query_params
. Para eso, utiliza la URL de autenticaciĂłn presentada a continuaciĂłn, reemplazando los campos necesarios segĂșn se describen debajo.
URL
https://auth.mercadopago.com/authorization?response_type=code&client_id=$APP_ID`redirect_uri=$YOUR_URL&code_challenge=$CODE_CHALLENGE&code_challenge_method=$CODE_METHOD
- Redirect_uri: URL proporcionada en el campo "URLs de redireccionamiento" de tu aplicaciĂłn.
- Code_verifier: cĂłdigo que debe generarse, respetar los requisitos para su funcionamiento; es decir, ser una secuencia aleatoria de caracteres con una longitud de entre 43 y 128 caracteres, que incluya letras mayĂșsculas, minĂșsculas, nĂșmeros y algunos caracteres especiales. Por ejemplo: 47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU.
- Code_challenge: a continuaciĂłn, es necesario crear un
code_challenge
, a partir delcode_verifier
, utilizando una de las siguientes transformaciones: - Si es posible utilizar S256, serĂĄ necesario seleccionar esta opciĂłn transformando el
code_verifier
en uncode_challenge
mediante una codificaciĂłnBASE64URL
después de aplicar la función "SHA256". - Si no es posible utilizar S256 por alguna razón técnica, y el servidor admite el método Plain, es posible definir el
code_challenge
igual alcode_verifier
. - Code_challenge_method: es el método utilizado para generar el
code_challenge
, segĂșn se describe en el Ătem anterior. Este campo puede ser, por ejemplo, S256 o Plain, dependiendo de la codificaciĂłn seleccionada en la etapa decode_challenge
.
- Después de enviar correctamente los códigos a Mercado Pago, obtendrås la autorización necesaria (
code_verifier
) para obtener el Access Token y realizar la verificaciĂłn por PKCE en las transacciones realizadas con OAuth.
Obtener token
El Access Token es el cĂłdigo utilizado en diferentes solicitudes de origen pĂșblico para acceder a un recurso protegido. En este flujo, representa una autorizaciĂłn otorgada por un vendedor a una aplicaciĂłn cliente, que contiene scopes y un tiempo de vigencia limitado para dicho acceso, y se concede por medio de una URL de redirecciĂłn
Sigue los pasos a continuaciĂłn para obtenerlo.
Edita tu aplicaciĂłn para que contenga tu URLs de redireccionamiento. Consulta Editar aplicaciĂłn.
EnvĂa la URL de autenticaciĂłn con los siguientes campos al vendedor con cuya cuenta deseas vincular la tuya:
Authentication_URL
https://auth.mercadopago.com/authorization?client_id=APP_ID&response_type=code&platform_id=mp&state=RANDOM_ID&redirect_uri=https://www.redirect-url.com
Campos DescripciĂłn Client_id Reemplaza el valor "APP_ID" con el nĂșmero de su aplicaciĂłn. Consulta Detalles de la aplicaciĂłn para mĂĄs informaciĂłn. State Reemplaza el valor "RANDOM_ID" con un identificador que sea Ășnico para cada intento y que no incluya informaciĂłn sensible, de forma que pueda identificar de quiĂ©n es el cĂłdigo recibido. AsĂ, podrĂĄs garantizar que la respuesta pertenezca a una solicitud iniciada por la misma aplicaciĂłn. Redirect_uri Agrega la URL informada en el campo "URLs de redireccionamiento" de su aplicaciĂłn. AsegĂșrate de que el redirect_uri sea una URL estĂĄtica. Consulta Detalles de la aplicaciĂłn para mĂĄs informaciĂłn. Si deseas enviar parĂĄmetros adicionales enredirect_uri
, utiliza el parĂĄmetrostate
para incluir esa informaciĂłn. De lo contrario, la llamada recibirĂĄ una respuesta de error si la URL no coincide exactamente con la configuraciĂłn de la aplicaciĂłn.Espera a que el vendedor acceda a la URL y permita el acceso. Al ingresar a la URL, el vendedor serĂĄ dirigido a Mercado Pago y deberĂĄ iniciar sesiĂłn en su cuenta para realizar la autorizaciĂłn.
Verifica la URL de redireccionamiento de tu servidor para ver el cĂłdigo de autorizaciĂłn devuelto en el parĂĄmetro de code.
Redirect_URL
https://www.redirect-url.com?code=CODE&state=RANDOM_ID
EnvĂa tus credenciales (
client_id
yclient_secret
), el cĂłdigo de autorizaciĂłn que fue devuelto en la propiedadcode
y, si has configurado el PKCE, el valorcode_verifier
al endpoint /oauth/token para recibir el Access Token como respuesta.
<?php
$client = new OauthClient();
$request = new OAuthCreateRequest();
$request->client_secret = "CLIENT_SECRET";
$request->client_id = "CLIENT_ID";
$request->code = "CODE";
$request->redirect_uri = "REDIRECT_URI";
$client->create($request);
?>
OauthClient client = new OauthClient();
String authorizationCode = "TG-XXXXXXXX-241983636";
client.createCredential(authorizationCode, null);
const client = new MercadoPagoConfig({ accessToken: 'access_token', options: { timeout: 5000 } });
const oauth = new OAuth(client);
oauth.create({
'client_secret': 'your-client-secret',
'client_id': 'your-client-id',
'code': 'return-of-getAuthorizationURL-function',
'redirect_uri': 'redirect-uri'
}).then((result) => console.log(result))
.catch((error) => console.log(error));
curl -X POST \
'https://api.mercadopago.com/oauth/token'\
-H 'Content-Type: application/json' \
-d '{
"client_id": "client_id",
"client_secret": "client_secret",
"code": "TG-XXXXXXXX-241983636",
"grant_type": "authorization_code",
"redirect_uri": "APP_USR-4934588586838432-XXXXXXXX-241983636",
"refresh_token": "TG-XXXXXXXX-241983636",
"test_token": "false"
}'
test_token
con el valor true
.Client credentials
Este flujo se utiliza cuando las aplicaciones solicitan un Access Token usando solo sus propias credenciales y para acceder a sus propios recursos. La principal diferencia con respecto a los otros flujos es que el usuario no interactĂșa en el proceso y, por lo tanto, la aplicaciĂłn no puede actuar en su nombre.
Obtener token
Access Token es el cĂłdigo utilizado en diferentes solicitudes de origen pĂșblico para acceder a un recurso protegido. En este flujo, se obtiene el Access Token sin interacciĂłn del usuario y solo para acceder a sus propios recursos.
Sigue los pasos a continuaciĂłn para obtenerlo.
- EnvĂa tus credenciales (
client_id
yclient_secret
) al endpoint /oauth/token, incluyendo el cĂłdigoclient_credentials
en el parĂĄmetrogrant_type
para recibir una nueva respuesta con un nuevoaccess_token
. - Actualiza la aplicaciĂłn con el Access Token recibido en la respuesta.
<?php
$client = new OauthClient();
$request = new OAuthCreateRequest();
$request->client_secret = "CLIENT_SECRET";
$request->client_id = "CLIENT_ID";
$client->create($request);
?>
const client = new MercadoPagoConfig({ accessToken: 'access_token', options: { timeout: 5000 } });
const oauth = new OAuth(client);
oauth.create({
'client_secret': 'your-client-secret',
'client_id': 'your-client-id',
}).then((result) => console.log(result))
.catch((error) => console.log(error));
curl -X POST \
'https://api.mercadopago.com/oauth/token'\
-H 'Content-Type: application/json' \
-d '{
"client_id": "client_id",
"client_secret": "client_secret",
"grant_type": "client_credentials",
}'