Autenticação e Autorização

A plataforma do Mercado Livre permite trabalhar com recursos públicos e privados da API através de chamadas HTTP com os verbos GET, PUT, POST, DELETE e OPTIONS.
O acesso a recursos públicos, como sites e categories disponíveis, pode ser feito de forma anônima, mas os recursos privados e as ações próprias dos usuários, como anunciar um item, responder perguntas ou ver informações de vendas/compras, precisam de autorização mediante um aplicativo.
Por isso, no seguinte guia explicaremos o significado de autenticação e o fluxo de autorização que deve ser aplicado para ter um access_token (senha de acesso a recursos privados por cada usuário que o aplicativo autorizar -válida por 6 horas).
Por exemplo:
Sem 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"
  }
}


Com 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"
  }
}

Conteúdos:

Autenticação

Autenticação é o ato ou processo para o estabelecimento ou confirmação de algo ou alguém como real.
A autenticação de uma pessoa consiste na verificação de sua identidade em função de um ou vários fatores, garantindo que os dados enviados sejam corretos.

Alguns métodos de autenticação são:

  • Biomédicos, digitais, retina do olho, etc.
  • Cartões inteligentes contendo informações dos certificados de um usuário.
  • Métodos clássicos baseados em senha.
  • Por exemplo, para acessar o Mercado Livre a autenticação é feita através do login (usuário e senha).

login

Autorização

Autorização é o processo pelo qual é permitido que alguém ou algo acesse recursos privados.
Dentro da autorização deverão ser definidos os recursos e operações que podem ser realizados, pois não é o mesmo outorgar permissões de somente leitura, leitura ou escrita.

Como conseguir a autorização? Através do Protocolo OAuth 2.0, um dos mais utilizados em plataformas abertas (Twitter, Facebook, etc.) e método seguro para trabalhar com recursos privados.

OAuth oferece:

  • Confidencialidade, o usuário não deverá revelar sua senha em momento nenhum.
  • Integridade, só aplicativos que tiverem a permissão poderão ver dados privados.
  • Disponibilidade, os dados sempre estarão disponíveis no momento em que forem necessários.

Dentro deste protocolo há 4 modos de funcionamento possíveis 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

Embora cada um destes seja utilizado para diferentes finalidades, dependendo do serviço que esteja sendo construído, a seguir só explicaremos os dois primeiros, pois eles permitem trabalhar com nossos recursos e gerar ferramentas para todos os usuários do Mercado Livre.

Client-side

O fluxo de autorização Client side é o adequado para os aplicativos que executam código do lado do cliente, por exemplo, aplicativos desenvolvidos em linguagem javascript/ajax, Angular ou aplicativos mobile.
Para conhecer mais detalhes sobre este fluxo, recomendamos ver o tutorial “Autorização Client-Side”.

Server-side

O fluxo de autorização Server side é o mais adequado para os aplicativos que executam código do lado do servidor, por exemplo, aplicativos desenvolvidos em linguagem Java, Grails, Go, etc.
Notas: Esta opção será útil para aplicativos que executam cron jobs para atualizar estoque de produtos ou operar sem que um usuário esteja interagindo diretamente com o aplicativo.
Para conhecer mais detalhes sobre este fluxo, recomendamos ver o tutorial “Autorização Server-Side”.

Tenha seu access_token!

Introduza o ID do aplicativo criado:

*Favor, coloque um ID valido do aplicativo
User informationJSON Response

-

Uso dos nossos SDK

Mediante o uso dos nossos SDKs, o processo de autorização será mais simples, pois poupará a codificação de todo o protocolo OAuth de zero.
Nossa comunidade já está utilizando!
Oferecemos SDK para:

Se você descobrir uma melhoria ou tiver uma sugestão, pode compartilhá-la com a comunidade, gerando um Pull Request dentro do nosso repositório GitHub.

Considerações

Validade e expiração de tokens
Quando você obtém um access_token, este terá validade imediatamente e poderá ser utilizado para realizar solicitações para a API durante um período limitado de 6 horas.
Alguns eventos podem invalidar um access_token antes do tempo de expiração. Por exemplo: alteração de senha pelo usuário, atualização do App Secret por um aplicativo e, obviamente, a revogação de permissões do seu aplicativo pelo usuário.

Referências de código de erro

Error_code Mensagem de erro Possível solução
invalid_client

client_id ou client_secret inválido.

O client_id e/ou client_secret fornecido não é válido. Verifique as informações de seu aplicativo e os parâmetros client_id e client_secret.
invalid_grant

Para criar um token de acesso, o usuário deverá ter uma sessão ativa ou seu aplicativo deverá solicitar autorização para o escopo offline_access.

A concessão de autorização fornecida não é válida, expirou, foi revogada ou não corresponde à URL de redirecionamento usada na solicitação de autorização. Verifique se o parâmetro redirect_uri é igual ao configurado em seu aplicativo (Gerenciador de Aplicações); caso isso não resolva o problema, faça envie nova solicitação para obter um novo código.
invalid_grant

Erro na validação da concessão. Pode ser que o código de autorização ou o token de atualização tenha expirado ou já tenha sido usado.

Expirou ou já foi usado. Envie uma nova solicitação para obter um novo código ou refresh_token.
invalid_grant

client_id não corresponde ao original.

O ID do client não coincide. Não foi encontrado o parâmetro client_id; para obter seu client_id, consulte seu aplicativo (Gerenciador de Aplicações).
invalid_grant

redirect_url não corresponde à original.

URL de redirecionamento não corresponde à original. Parâmetro redirect_url diferente do configurado em seu aplicativo; para obter redirect_url, consulte o aplicativo (Gerenciador de Aplicações)
invalid_scope

Scope inválido.

O escopo solicitado não é válido, é desconhecido ou é mal formado. Os valores permitidos para o escopo do parâmetro são: “offline_access”, “write”, “read”.
invalid_request

Quantidade incorreta de parâmetros com valores duplicados.

A solicitação não inclui um parâmetro obrigatório, inclui um parâmetro ou valor de parâmetro não aceito ou está mal formada. Verifique se os parâmetros enviados são válidos e não são duplicados.
unsupported_grant_type

Tipo de concessão não aceito: ${0}.

O servidor de autorização não aceita o tipo de concessão. Os valores permitidos para grant_type são “authorization_code” ou “refresh_token”.
forbidden

A chamada não autoriza o acceso ao recurso.

A chamada não autoriza o acceso Se utiliza o token de outro usuário.


Artigos relacionados :
Server side.
Client side.


Próximo:
Consulta de usuários.

Please rate this