- 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
0 comentarios
El artículo está cerrado para comentarios.