Autenticación y Autorización

La plataforma de Mercado Libre te permite trabajar con recursos públicos y privados de la API a través de llamadas HTTP con los verbos GET, PUT, POST, DELETE y OPTIONS.
El acceso a los recursos públicos, tales como sites y categories disponibles, se puede hacer en forma anónima pero los recursos privados y las acciones propias de los usuarios como publicar un artículo, responder preguntas o ver la información de ventas/compras requieren autorización mediante una aplicación.
Por tal motivo en la siguiente guía te explicaremos el significado de autenticación y el flujo de autorización que se debe seguir para obtener un access_token (llave de acceso a los recursos privados por cada usuario que autorice la aplicación- válida por 6 horas).
Por ejemplo:
Sin access_token (Recurso público)

https://api.mercadolibre.com/users/226384143/

{
  "id": 226384143,
  "nickname": "TETE9928972",
  "registration_date": "2016-08-25T11:36:00.000-04:00",
  "country_id": "AR",
  "address": {
    "state": "AR-C",
    "city": "Palermo"
  },
  "user_type": "normal",
  "tags": [
    "normal",
    "test_user",
    "user_info_verified"
  ],
  "logo": null,
  "points": 100,
  "site_id": "MLA",
  "permalink": "http://perfil.mercadolibre.com.ar/TETE9928972",
  "seller_reputation": {
    "level_id": null,
    "power_seller_status": null,
    "transactions": {
      "period": "historic",
      "total": 1,
      "completed": 1,
      "canceled": 0,
      "ratings": {
        "positive": 0,
        "negative": 0,
        "neutral": 1
      }
    }
  },
  "buyer_reputation": {
    "tags": [
    ]
  },
  "status": {
    "site_status": "active"
  }
}


Con access_token (Recurso privado)

 
 https://api.mercadolibre.com/users/226384143?access_token=$ACCESS_TOKEN

{
  "id": 226384143,
  "nickname": "TETE9928972",
  "registration_date": "2016-08-25T11:36:00.000-04:00",
  "first_name": "Test",
  "last_name": "Test",
  "country_id": "AR",
  "email": "test_user_38730994@testuser.com",
  "identification": {
    "type": "DNI",
    "number": "1111111"
  },
  "address": {
    "state": "AR-C",
    "city": "Palermo",
    "address": "Test Address 123",
    "zip_code": "1414"
  },
  "phone": {
    "area_code": "01",
    "number": "1111-1111",
    "extension": "",
    "verified": false
  },
  "alternative_phone": {
    "area_code": "",
    "number": "",
    "extension": ""
  },
  "user_type": "normal",
  "tags": [
    "normal",
    "test_user",
    "user_info_verified"
  ],
  "logo": null,
  "points": 100,
  "site_id": "MLA",
  "permalink": "http://perfil.mercadolibre.com.ar/TETE9928972",
  "shipping_modes": [
    "custom",
    "not_specified"
  ],
  "seller_experience": "ADVANCED",
  "bill_data": {
    "accept_credit_note": null
  },
  "seller_reputation": {
    "level_id": null,
    "power_seller_status": null,
    "transactions": {
      "period": "historic",
      "total": 1,
      "completed": 1,
      "canceled": 0,
      "ratings": {
        "positive": 0,
        "negative": 0,
        "neutral": 1
      }
    }
  },
  "buyer_reputation": {
    "canceled_transactions": 0,
    "transactions": {
      "period": "historic",
      "total": null,
      "completed": null,
      "canceled": {
        "total": null,
        "paid": null
      },
      "unrated": {
        "total": null,
        "paid": null
      },
      "not_yet_rated": {
        "total": null,
        "paid": null,
        "units": null
      }
    },
    "tags": [
    ]
  },
  "status": {
    "site_status": "active",
    "list": {
      "allow": true,
      "codes": [
      ],
      "immediate_payment": {
        "required": false,
        "reasons": [
        ]
      }
    },
    "buy": {
      "allow": true,
      "codes": [
      ],
      "immediate_payment": {
        "required": false,
        "reasons": [
        ]
      }
    },
    "sell": {
      "allow": true,
      "codes": [
      ],
      "immediate_payment": {
        "required": false,
        "reasons": [
        ]
      }
    },
    "billing": {
      "allow": true,
      "codes": [
      ]
    },
    "mercadopago_tc_accepted": true,
    "mercadopago_account_type": "personal",
    "mercadoenvios": "not_accepted",
    "immediate_payment": false,
    "confirmed_email": false,
    "user_type": "simple_registration",
    "required_action": ""
  },
  "credit": {
    "consumed": 101.1,
    "credit_level_id": "MLA1"
  }
}

Contenidos:

Autenticación

La autenticación es el acto o proceso para el establecimiento o confirmación de algo o alguien como real.
En el caso de la autenticación de una persona consiste en verificar su identidad en función a uno o varios factores asegurando que los datos de quién los envió sean los correctos.

Algunos métodos de autenticación son:

  • Biomédicas, por huellas dactilares, retina del ojo, etc.
  • Tarjetas inteligentes que guardan información de los certificados de un usuario.
  • Métodos clásicos basados en contraseña.
  • Por ejemplo, para ingresar a Mercado Libre nos autenticamos a través del login (usuario y contraseña).

login

Autorización

La autorización es el proceso por el cual permitimos a alguien o a algo acceder a recursos privados.
Dentro de la autorización se deberá definir qué recursos y qué operaciones se pueden realizar ya que no es lo mismo otorgar permisos de sólo lectura, que lectura y escritura.

¿Cómo logramos la autorización? A través del Protocolo OAuth 2.0, uno de los más utilizados en plataforma abiertas (Twitter, Facebook, etc.) y método seguro para trabajar con recursos privados.

OAuth nos brinda:

  • Confidencialidad, el usuario no deberá revelar su clave en ningún momento.
  • Integridad, sólo podrán ver datos privados aquellas aplicaciones que tengan el permiso de hacerlo.
  • Disponibilidad, los datos siempre estarán disponibles en el momento que se necesiten.

Dentro de este protocolo existen 4 modos de funcionamiento posibles denominados Grant Types:

– The Authorization Code Grant Type (Server Side)
– The Implicit Grant Type (Client Side)
– The Password Credentials Grant Type
– The Client Credentials Grant Type

Si bien cada uno de ellos es utilizado para diferentes propósitos dependiendo del servicio que se está construyendo a continuación sólo explicaremos los dos primeros ya que son los que te permitirán trabajar con nuestros recursos y generar herramientas para todos los usuarios de Mercado Libre.

Client-side

El flujo de autorización Client side es el adecuado para las aplicaciones que ejecutan código del lado del cliente, por ejemplo aplicaciones desarrolladas en lenguaje javascript/ajax, Angular o aplicaciones mobile.
Para conocer más detalles sobre este flujo te sugerimos ir al tutorial “Autorización Client-Side

Server-side

El flujo de autorización Server side es el más adecuado para las aplicaciones que ejecutan código del lado del servidor, por ejemplo aplicaciones desarrolladas en lenguaje como Java, Grails, Go, etc.

Nota: Esta opción te será de utilidad para aplicaciones que ejecutan cron jobs para actualizar stock de productos u operar sin que un usuario esté interactuando directamente con la aplicación.
Si deseas conocer más detalles sobre este flujo te sugerimos ir al tutorial “Autorización Server-Side

¡Obtén tu access_token!

Introduzca el ID de la aplicación que acaba de crear:

*Please enter a valid Application ID
Información del usuarioJSON Response

-

Uso de nuestros SDK

Mediante el uso de nuestros SDKs el proceso de autorización será más simple ya que te ahorrará la codificación de todo el protocolo OAuth de cero.
¡Nuestra comunidad ya los está utilizando!
Ofrecemos SDK para:

Si descubres una mejora o sugerencia puedes brindarla a la comunidad generando un Pull Request dentro de nuestro repositorio GitHub.

Consideraciones

Validez y expiración de tokens
Cuando obtienes un access_token, será válido de inmediato y se podrá utilizar para realizar solicitudes a la API durante un período limitado de 6 horas.
Existen eventos que pueden invalidar un access_token antes del tiempo de expiración. Por ejemplo: cambio de contraseña por parte del usuario, la actualización del App Secret por parte de una aplicación y, por supuesto, la revocación de permisos a tu aplicación por parte del usuario.

Referencia de códigos de error

ErrorMensaje de errorPosible solución
invalid_client

client_id o client_secret inválido.

El client_id y/o client_secret provisto es inválido.Controla la información de tu aplicación y verifica los parámetros client_id y client_secret
invalid_grant

Para crear un access token el usuario {0} debe tener una sesión activa o tu aplicación debe solicitar autorización para el alcance offline_access.

El otorgamiento de la autorización provista es inválido, expiró, fue revocado o no coincide con el URI de redireccionamiento utilizado en la solicitud de autorización.Verifica que el parámetro redirect_uri sea el mismo configurado en tu aplicación (Administrador de Aplicaciones); si esto no resuelve el problema, realiza una nueva solicitud para obtener un código nuevo.
invalid_grant

Error en la validación del otorgamiento. Es posible que tu código de autorización o refresh token haya expirado o que ya haya sido utilizado.

Expiró o ya fue utilizado.Realiza una nueva solicitud para obtener un nuevo código o refresh_token.
invalid_grant

El client_id no coincide con el original.

El ID de cliente no coincide.No se encontró el parámetro client_id; para obtener tu client_id, consulta tu aplicación (Administrador de Aplicaciones).
invalid_grant

El redirect_uri no coincide con el original.

El URl de redireccionamiento no coincide con el original.El parámetro redirect_uri no es el mismo configurado en tu aplicación; para obtener un redirect_uri, consulta tu aplicación (Administrador de Aplicaciones)
invalid_scope

Alcance inválido.

El alcance solicitado es inválido, desconocido o está mal formado.Los valores permitidos para el parámetro alcance son: “offline_access”,”write”,”read”.
invalid_request

Cantidad incorrecta de parámetros con valores duplicados.

La solicitud no incluye un parámetro obligatorio, incluye un parámetro o valor de parámetro no soportado o está mal formada de otro modo.Verifica que los parámetros enviados sean válidos y no estén duplicados.
unsupported_grant_type

Tipo de otorgamiento no soportado: ${0}.

El server de autorización no soporta el tipo de otorgamiento.Los valores permitidos para grant_type son “authorization_code” o “refresh_token”.
forbidden

La llamada no autorizada acceder a este recurso.

La llamada no autoriza el accesoSe está utilizando el token de otro usuario.



Siguiente:
Consulta usuario.


Artículos relacionados:
Server side
Client side

Por favor califica del 1 al 5