Configura OAuth2 fácilmente y asegura tus datos, mejorando la protección y la experiencia del usuario.
Proceso de autorización
-
Configuración de Autenticación OAuth2: Todo lo que necesitas saber
- Esta optimizado para aplicaciones del lado del servidor.
- El código fuente no se expone públicamente.
- Mantiene la confidencialidad del Client Secret.
¿Qué es OAuth2?
Es un marco de autorización que permite a las aplicaciones obtener acceso limitado a cuentas de usuario en un servicio HTTP como Google, Facebook, GitHub, entre otros.
¿Cómo funciona?
Funciona delegando la autenticación del usuario (Merchant) al servicio que aloja la cuenta (Multivende) y autorizando a las aplicaciones de terceros a acceder a los datos de la cuenta del Merchant seleccionando los permisos que desea otorgar.
Roles
- Propietario del recurso - Merchant
- Cliente - Aplicación
- Servidor de recursos - Multivende
- Servidor de autorización - Multivende
-
Proceso de Autorización
1. El Merchant ingresa al sitio web de la aplicación y genera la solicitud de autorización a Multivende.
2. Aplicación redirecciona al Merchant a Multivende enviando por parámetro en la URL:
- "response_type" = code.
- "client_id" = Client ID.
- "redirect_uri" = redirect_uri (Ingresada previamente al crear la aplicación en Multivende).
- "scope"= scopes (Ingresado(s) previamente al crear la aplicación en Multivende).
Ejemplo:
https://app.multivende.com/apps/authorize?response_type=code&client_id=00000000000&redirect_uri=asd&scope=read:checkouts
3. El Merchant selecciona los permisos (scopes) a autorizar para la aplicación. Mas detalles en el artículo Scopes.
4. Multivende genera el código de autorización y redirige al redirect_uri. Enviando:
- code(Código de autorización)
5. Aplicación solicita el access token a Multivende por el endpoint Authenticate OAuth2 Enviando:
-
- client_id.
- client_secret.
- grant_type: 'authorization_code'.
- code.
6. Multivende valida que el authorization code entregado no haya expirado y retornar el access token. La aplicación recibe:
-
- token
- expiresAt
- refreshToken
- refreshTokenExpiresAt
- scopes
- MerchantId
- OauthClientId
Response:
{ "_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "status": "created", "OauthClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "CreatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "UpdatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "OwnerId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "scopes": { "read:products": true, "write:products": true, "read:stocks": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:stocks": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:prices": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:prices": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:checkouts": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:checkouts": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:product_links": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:product_links": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "manage:checkouts": true, "manage:product_links": true }, "expiresAt": "2021-03-03T01:45:34.958Z", "refreshToken": "rt-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "refreshTokenExpiresAt": "2021-03-04T19:45:34.958Z", "updatedAt": "2021-03-02T19:45:34.000Z", "createdAt": "2021-03-02T19:45:34.000Z", "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }Se ilustra a continuación en el diagrama del proceso de autorización:
Diagrama del proceso de autorización
-
Proceso para actualizar el token
Para generar un nuevo token se debe solicitar el endpoint Refresh token OAuth2 enviando:
- refresh_token: Generado en el paso anterior. (Proceso de Autorización)
- client_id.
- client_secret.
- grant_type: 'refresh_token'.
Retorna dentro del response:
- token.
- expiresAt.
- refreshToken.
- refreshTokenExpiresAt.
- scopes.
- MerchantId.
- OauthClientId.
Response:
{ "_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "status": "created", "OauthClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "CreatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "UpdatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "OwnerId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "scopes": { "read:products": true, "write:products": true, "read:stocks": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:stocks": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:prices": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:prices": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:checkouts": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:checkouts": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "read:product_links": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "write:product_links": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": true }, "manage:checkouts": true, "manage:product_links": true }, "expiresAt": "2021-03-03T01:45:34.958Z", "refreshToken": "rt-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "refreshTokenExpiresAt": "2021-03-04T19:45:34.958Z", "updatedAt": "2021-03-02T19:45:34.000Z", "createdAt": "2021-03-02T19:45:34.000Z", "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }Diagrama proceso de refrescado del token:
Diagrama proceso de refrescado
Importante
- Cada vez que el Merchant otorgue permisos a la aplicación se genera una nueva conexión entre la aplicación y la cuenta del Merchant la cual no sustituye las conexiones anteriores. Por lo que si tu aplicación solo permite una conexión, el Merchant deberá eliminar las conexiones que no de desean usar.
- Se debe encriptar con un algoritmo de clave simétrica el token y refresh token antes de almacenarlo en la base de datos.
- Y se debe seguir los protocoles establecidos en nuestra sección de Seguridad.
- Tiempos de caducidad:
Caducidad
Usos
authorization code
24 horas
1 sola vez
token
6 horas
indefinido
refreshToken
48 horas
1 sola vez
Equipo Integraciones API Multivende
-
Todo lo que necesitas saber sobre Webhooks: Configuración y Uso
Notificaciones en tiempo real de eventos en Multivende enviadas a tu app vía Callback URL.
Cuando se produce un evento en Multivende, se envía una solicitud HTTPS POST a la URL de devolución de llamada (Callback URL) por cada una de las apps de integración que están suscritas a los webhooks. A partir de las notificaciones se puede usar para desencadenar reglas o procesos específicos de la aplicación.
De esta manera, las apps resultan más eficientes, porque identifican cuando se produce un cambio en tiempo real, y, entonces, puede hacer las solicitudes periódicas en un rango de tiempo más amplio a la API para obtener el contenido actualizado.
Los webhooks disponibles son los siguientes:
- Stock: Se notificará los cambios del stock de una versión de un producto por bodega.
- Products: Se notificará que hay un cambio en los detalles o un nuevo producto y sus versiones.
- Product links: Se notificará que hay un cambio en el estado de sincronización del producto con el canal.
- Checkouts: Se notificará que hay una nueva venta, cambios de estados, cambio en el detalle de la venta.*
- Prices: Se notificará los cambios en los precios de una versión de un producto por lista de precio.
- Delivery Orders: Se notificará los cambios de estados en las entregas con despacho a domicilio de una venta.
- Pick Up Orders: Se notificará los cambios de estados en las entregas con retiro en tienda de una venta.
Ejemplo de notificación cambio de checkouts:
{
"CheckoutId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"MerchantId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"MarketplaceConnectionId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"MerchantAppId":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"OauthClient":{
"_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"client_id":"99631xxxxxxx"
},
"resource":"checkouts",
"attemps":1,
"received":"2021-04-08T19:55:07.061Z"
}Más ejemplos de notificaciones (link)
⚠️ Advertencia: Si al consultar el detalle de la venta con el CheckoutId el response es con status 404, se debe a que se trata de una venta que presentó error en el registro de Multivende la cual no queda registrada.Importante:
- Recomendamos no procesar la notificación (Webhooks) cuando esta se recibe en tu sistema, sino realizarlo de forma asíncrona, implementando un sistema de colas para el procesamiento de las notificaciones.
- Guarda el JSON directamente en algún lugar.
- Por ejemplo Redis o alguna BBDD.
- El Callback URL se registra al momento de crear la aplicación (Crear tu aplicación).
- El Callback URL debe poseer certificado SSL válido (HTTPS).
- El Callback URL no debe poseer validación de token.
- El tiempo de respuesta de la CallbackURL debe ser menor a 6 segundos.
- Los Webhooks son infinitos, los costos de su operación es por parte de ustedes como desarrolladores.
- Por seguridad deben agregar que solo reciban Request de nuestra IP como Multivende.
- Los webhooks se deben complementar con un polling para disminuir la probabilidad de pérdida de datos.
Equipo Integraciones API Multivende
-
Scopes en profundidad: Guía para configuración y uso Efectivo
Permisos que otorga el Merchant para que la app acceda solo a los datos de los scopes autorizados.
- “all”: La aplicación tendrá permiso a todos los recursos asociados a ese scope.
- “xxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx”: La aplicación tendrá permiso al _id del recurso asociado al alcance.
Por ejemplo:
El Merchant otorga el alcance “read: stock”. Como el stock varia según la bodega, el Merchant puede seleccionar otorgar acceso a todas sus bodegas o a una/varias bodegas específicas.
- Permiso encendido para leer el Stock de Todas las sucursales y bodegas:
Response:
{ "_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "status": "created", "OauthClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantAppId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "CreatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "UpdatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "OwnerId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "scopes": { "read:stocks": { "all": true } }, "expiresAt": "2024-10-15T19:57:26.468Z", "refreshToken": "rt-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "refreshTokenExpiresAt": "2024-10-17T13:57:26.468Z", "updatedAt": "2024-10-15T13:57:26.000Z", "createdAt": "2024-10-15T13:57:26.000Z", "token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXX........." }
Si el merchant otorga permisos "all", deberá consultar el endpoint correspondiente según sea el caso para obtener el listado de todos los recursos.
- Permiso para acceder solo a una bodega o sucursal:
Response:
{ "_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "status": "created", "OauthClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantAppId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "CreatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "UpdatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "OwnerId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "scopes": { "read:stocks": { "all": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": false, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX1234": true // Bodega con acceso } }, "expiresAt": "2024-10-15T19:57:26.468Z", "refreshToken": "rt-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "refreshTokenExpiresAt": "2024-10-17T13:57:26.468Z", "updatedAt": "2024-10-15T13:57:26.000Z", "createdAt": "2024-10-15T13:57:26.000Z", "token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXX........." }
En este caso en el json del scope el valor del campo “all” es “false” por lo que la aplicación no tiene acceso a todas las bodegas. Pero tiene acceso a la bodega con id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX1234".
- Sin permiso para leer stock de ninguna sucursal o bodega:
Response:
{ "_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "status": "created", "OauthClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "MerchantAppId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "CreatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "UpdatedById": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "OwnerId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "scopes": { "read:stocks": { "all": false // Ninguna bodega con acceso. } }, "expiresAt": "2024-10-15T19:57:26.468Z", "refreshToken": "rt-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "refreshTokenExpiresAt": "2024-10-17T13:57:26.468Z", "updatedAt": "2024-10-15T13:57:26.000Z", "createdAt": "2024-10-15T13:57:26.000Z", "token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXX........." }
Tipos de scope:
- Read: Otorga permisos de solo lectura para el scope seleccionado.
- Write: Otorga permisos de escritura para el scope seleccionado.
- Manage: Otorga permisos para administrar(lectura/escritura) los recursos del scope seleccionado de forma global, no permite seleccionar por recurso.
ℹ️ Importante: El permiso de manage:checkouts es exclusivamente para aplicaciones que integran canales de ventas.Los diferentes scopes que tenemos disponibles son los siguientes:
- Permisos para consultar/escribir los productos, sus versiones, categorías, color, talla, entre otros. Se otorga acceso global.
-
- read:products
- write:products
-
- Permisos para consultar/escribir el stock de los productos según las bodegas. Se puede otorgar acceso a global o segmentado.
-
- read:stocks
- write:stocks
-
- Permisos para consultar/escribir el precio de los productos según las listas de precios. Se puede otorgar acceso a global o segmentado.
-
- read:prices
- write:prices
-
- Permisos para consultar/escribir/administrar las ventas de los diferentes canales de venta. Se puede otorgar acceso a global o segmentado.
-
- read:checkouts
- write:checkouts
- manage:checkouts Este scope se debe habilitar solo para las aplicaciones que son canales de venta.
-
- Permisos para consultar/escribir/administrar la asociación de una versión de un producto a los diferentes canales de venta. Se puede otorgar acceso a global o segmentado por canal.
-
- read:product_links
- write:product_links
- manage:product_links
- Este scope se debe habilitar solo para las aplicaciones que son canales de venta.
-
- Permisos para consultar/escribir/administrar las bodegas que tiene creadas el merchant. Se puede otorgar acceso a global o segmentado.
-
- read:warehouses
- write:warehouses
- manage:warehouses
-
- Permisos para consultar/escribir/administrar los clientes que tiene creados el merchant. Se puede otorgar acceso a global.
-
- read:clients
- write:clients
- manage:clients
-
- Permisos para consultar/escribir en las conexiones con couriers que tiene el merchant creada . Se puede otorgar acceso a global o segmentado.
-
- read:couriers
- write:couriers
-
- Permisos para consultar los canales que tiene creados el merchant. Se puede otorgar acceso a global o segmentado.
-
- read:channels
-
- Permisos para generar etiquetas de despacho desde los canales de ventas que permiten esta funcionalidad.
-
- read:channels
- read:checkouts
- write:checkouts
-
Equipo Integraciones API Multivende
-
¿Cómo generar authorization code sin interfaz gráfica?
Guía para generar el código de autorización OAuth2 sin necesidad de una interfaz gráfica.
En caso de no contar con una interfaz gráfica para realizar la conexión de la aplicación con la cuenta del Merchant igualmente puede generar tu código de autorización, primero debes ingresar a tu cuenta de Desarrollador, dirigirte a "Aplicaciones", luego a "Listado de aplicaciones" y hacer clic en la acción del "Lápiz" (Editar).
Dentro de la configuración de la aplicación podrás visualizar la opción “Agregar cuentas de merchant”, la cual se encuentra debajo de “Visibilidad”.
Importante, esto solo se puede realizar una vez tengas tu aplicación autorizada.
Una vez dentro, debes insertar el MerchantId en el recuadro y hacer click sobre el botón guardar.
Ahora el Merchant podrá visualizar tu aplicación en el listado de aplicaciones de la vista de Merchants.
Para esto, el Merchant debe ingresar a la plataforma, dirigirse a "Aplicaciones" luego a "Listado de aplicaciones".
Aquí veremos un listado de aplicaciones certificadas de Multivende, se debe hacer scroll hasta el final de la página en donde dice "Listado de aplicaciones propias no certificadas", debes hacer clic en "Ver más" en la aplicación a la cual se desea generar el authorization code, donde el Mrechant podrá otorgar los permisos según lo requiera.
Seguido a esto se debe seleccionar la opción "Generar authorization code", aquí el Merchant podrá brindarle permiso (Scopes) a los datos seleccionados y establecer un nombre para la conexión con la aplicación.
Válida que la información esté correcta y listo, el código de autorización será generado y podrás continuar con el proceso de autenticación mediante Oauth2
Podrás ver el proceso en el siguiente video:
Equipo Integraciones API Multivende
-
Cómo generar un nuevo Código de Autorización en Multivende sin reconectar la aplicación - Guía paso a paso
Guía para generar el código de autorización OAuth2 sin reconectar la aplicación.
Para generar un nuevo código de autorización de una aplicación ya conectada a la cual se le expiró el refreshToken o algún problema similar; lo puedes realizar sin generar una nueva conexión de la aplicación en Multivende. Para ello debes seguir los siguientes pasos.
Primero, el Merchant debe ingresar a la plataforma de Multivende, seguido a esto hará clic a la opción "Aplicaciones" la cual desplegará "Listado de aplicaciones".
Aquí el Merchant podrá ver todas las aplicaciones que tenga conectadas en su cuenta:
- Se debe hacer click sobre la acción del lápiz en la aplicación en concreto.
- Luego "Generar código de autorización"
- Y listo, se ha generado el código de autorización para continuar con tu flujo de autenticación.
Puedes ver los detalles en el siguiente vídeo:
Importante
- El código de autorización solo se genera al principio del flujo, luego debes renovar tu token con el refreshToken. Solo en los casos que el refreshToken expire u algún problema similar, se puede realizar este proceso.
- La obtención del código de autorización es un proceso manual que se realiza únicamente desde la cuenta del Merchant. Este proceso no puede ser automatizado debido a que requiere confirmación por parte del Merchant los permisos a otorgar a la aplicación.
Equipo Integraciones API Multivende
-
OAuth2 en Multivende: Cómo obtener y renovar tu token de acceso
Clave para asegurar que apps externas interactúen de forma segura con una API.
El proceso de autenticación mediante OAuth2 es un paso crucial para garantizar que las aplicaciones de terceros puedan interactuar de manera segura con una API, garantizando que solo los usuarios autorizados puedan acceder a ciertos recursos. Sin embargo, en este proceso, pueden surgir varios errores que impiden obtener o renovar el token de acceso. A continuación, te explicamos los pasos involucrados en este proceso, los posibles errores que podrías enfrentar y cómo solucionarlos.
Proceso de autenticación con OAuth2
Cuando un merchant entrega el código de autorización, se inicia el proceso de autenticación mediante OAuth2. El primer paso consiste en enviar los parámetros necesarios al Endpoint Authenticate OAuth2 utilizando una solicitud HTTP POST.
Ejemplo de solicitud:
curl --location -g '{{base_url}}/oauth/access-token' \
--header 'cache-control: no-cache' \
--header 'Content-Type: application/json' \
--data '{
"client_id": 00000000000,
"client_secret": "NMV6TupxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpR3YNW",
"grant_type": "authorization_code",
"code": "ac-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"
}'En este punto, la API responderá con un objeto que contiene el
token
,refreshToken
y la duración de su validez.Respuesta exitosa:
{
"_id": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"status": "created",
"OauthClientId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"MerchantId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"CreatedById": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"UpdatedById": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"OwnerId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"scopes": { ... },
"expiresAt": "2021-03-03T01:45:34.958Z",
"refreshToken": "rt-xxxxxxxx-xxxx-4fd9-xxxx-8d9a818bef2a",
"refreshTokenExpiresAt": "2021-03-04T19:45:34.958Z",
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}El
token
tiene una validez de 6 horas, mientras que elrefreshToken
tiene una validez de 48 horas y puede ser utilizado una única vez para renovar el acceso.Renovación del Token mediante el Refresh Token
Cuando el
token
está cerca de expirar, se debe utilizar el Endpoint Refresh Token OAuth2 para obtener un nuevotoken
y un nuevorefreshToken
. Esto debe realizarse antes de que el token original caduque, idealmente cuando queda aproximadamente 1 hora de vida.Ejemplo de solicitud para renovar el token:
curl --location -g '{{base_url}}/oauth/access-token' \
--header 'cache-control: no-cache' \
--header 'Content-Type: application/json' \
--data '{
"client_id": 00000000000,
"client_secret": "NMV6TupxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpR3YNW",
"grant_type": "refresh_token",
"refresh_token": "rt-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"
}'Respuesta exitosa:
{
"_id": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"status": "created",
"OauthClientId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"MerchantId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"CreatedById": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"UpdatedById": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"OwnerId": "xxxxxxxxx-3736-4f94-8xxx-xxxxxxxxxxxxxxx",
"scopes": { ... },
"expiresAt": "2021-03-03T01:45:34.958Z",
"refreshToken": "rt-xxxxxxxx-xxxx-4fd9-xxxx-8d9a818bef2a",
"refreshTokenExpiresAt": "2021-03-04T19:45:34.958Z",
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}Este proceso puede ser automatizado para que, cuando el
token
esté cerca de su expiración (por ejemplo, con 5 horas de antelación), se realice la renovación automática utilizando el refreshToken. De este modo, se garantiza la continuidad en el flujo de autenticación sin interrupciones.Errores Comunes
-
Token Expirado o Invalidado: Si el
token
ha expirado y no se ha renovado a tiempo, el proceso debe reiniciarse desde el principio. Esto implica que el merchant deberá generar un nuevo código de autorización manualmente desde la configuración de la aplicación. -
Refresh Token Expirado o No Utilizado: Si el
refreshToken
ha expirado o no ha sido utilizado dentro de su período de validez, el proceso también debe reiniciarse desde cero, lo que requerirá que el merchant obtenga un nuevo código de autorización manualmente. -
Error en la Solicitud de Renovación: Si hay errores en la solicitud de renovación del
token
(por ejemplo, errores de red, parámetros incorrectos, etc.), asegúrate de validar los datos enviados, como elclient_id
,client_secret
y elrefresh_token
. -
Error en la Respuesta del Servidor: Si la API devuelve un error, revisa el código de estado HTTP y el mensaje de error para identificar la causa. Algunos errores comunes incluyen falta de permisos o problemas de autenticación.
Resumen
Para gestionar adecuadamente la autenticación OAuth2, es importante realizar lo siguiente:
-
Obtener y gestionar el
token
y elrefreshToken
de manera eficiente. -
Automatizar la renovación del
token
antes de su expiración. -
Asegurarse de que el
refreshToken
se use dentro de su período de validez. -
Si el
refreshToken
expira o no es válido, reiniciar el proceso de autenticación obteniendo un nuevo código de autorización manualmente.
Este proceso garantiza que las interacciones con la API sean seguras y fluidas, manteniendo el acceso autorizado de manera continua y sin interrupciones.
Equipo Integraciones API Multivende
-