Este documento presenta una agenda para una conferencia sobre autenticación y autorización en MercadoLibre. La agenda incluye discusiones sobre métodos de autenticación, recursos públicos vs privados, el protocolo OAuth, flujos de autorización del lado del cliente y servidor, creación de aplicaciones en MercadoLibre, y ejemplos de código. El objetivo es construir los cimientos para crear una compañía de $3 mil millones.
2. This is our vision
Building the foundation to Build a 3B Company by FY20
Agenda
Autenticación . ¿Qué es? - Métodos de Autenticación
Recursos . Públicos y Privados
Autorización . ¿Qué es? - Protocolo OAuth
Flujo de autorización . Client-Side - Server-Side
Crear una aplicación . Crear una app en Mercadolibre
Ejemplo en código. Server-Side
Preguntas
51. Muchas
Gracias
Los espero en el espacio de networking para
seguir aprendiendo juntos.
Twitter
@melidevelopers
@leandrobertalot
Notas do Editor
Buenas tardes!
¿Como les va? - ¿Cómo fue ese Cofee break!?
Espero que la cafeína haya activado esas mentes para lo que se viene durante el transcurso del día
Conmigo vamos a ver Autorización y Autenticación
Pero antes...
Aquí la agenda de la charla de hoy.
Ahora si procedamos a explicar autorización y Autenticación
La autenticación es el acto o proceso para el establecimiento o confirmación de algo (o alguien) como real. La autenticación de un objeto puede significar (pensar) la confirmación de su procedencia, mientras que la autenticación de una persona a menudo consiste en verificar su identidad. Todo ello en función de uno o varios factores.
Yendo hacia lo técnico
Es el servicio que trata de asegurar que una comunicación sea auténtica, es decir, verificar que el origen de los datos es el correcto, quién los envió y cuándo fueron enviados y recibidos también sean correctos.
Algunos métodos de autenticación son...
Algunos métodos de autenticación son:
Biométricas, 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...
Por ejemplo para ingresar a Mercadolibre nosotros nos autenticamos a través del login. Con un usuario y una contraseña.
De esta manera autenticamos nuestra identidad dentro de Mercadolibre.
Con eso cubrimos los conceptos básicos de Autenticación.
Antes de comenzar con Autorización debemos conocer algunos conceptos relacionados con los recursos.
Los recursos se clasifican en dos grandes grupos...
Recursos Públicos y Recursos Privados
Los recursos públicos son aquellos que como su nombre lo indica son accesibles por todos sin necesidad de una autenticación o validación previa.
En el ejemplo consultamos mi perfil de Mercadolibre como comprador.
La información que allí se muestra (Nombre de usuario, ubicación, puntos como comprador, calificación, y los últimos artículos que compre). Es pública. Cualquier persona que acceda a esa dirección va a ver lo mismo y no necesitamos de una validación para verlos
Accediendo al recurso users de nuestra API (api.mercadolibre.com) y consultando en base al id de usuario. vemos la misma información en formato JSON más algún agregado.
Allí nuevamente tenemos ...
Accediendo al recurso users de nuestra API (api.mercadolibre.com) y consultando en base al id de usuario. vemos la misma información en formato JSON más algún agregado.
Allí nuevamente tenemos ...
Accediendo al recurso users de nuestra API (api.mercadolibre.com) y consultando en base al id de usuario. vemos la misma información en formato JSON más algún agregado.
Allí nuevamente tenemos ...
Accediendo al recurso users de nuestra API (api.mercadolibre.com) y consultando en base al id de usuario. vemos la misma información en formato JSON más algún agregado.
Allí nuevamente tenemos ...
Los recursos privados son aquellos que no todo el mundo deben ver.
Número de documento, edad, estado civil para aquellos que están de trampa, etc. Son ejemplo de datos que siguiendo el ejemplo del usuario dentro de Mercadolibre no todo el mundo debería poder verlos.
Por ejemplo.
Autenticando mi identidad dentro de Mercadolibre a través del login e ingresando a Mi Cuenta puedo ver información privada Como por ejemplo
Mi número de Documento, email personal, mi teléfono personal. Mis tarjetas de Crédito, etc.
Como verán no todo el mundo debe acceder a esta información
¿Quién podría verlos entonces?
Si estoy autenticado el dueño de esa información debería poder verlos por razones obvias
O también aquellos que el dueño de esos recursos autoricen para poder verlos y porque no también permitirles trabajar con ellos en caso que sea necesario
A través de la llamada a la API accediendo al recurso de users nuevamente vemos los datos privados
La diferencia con la llamada anterior es que en esta ocasión enviamos un parámetro llamado access_token. Por ahora no se preocupen por este parámetro ya que lo explicaré más adelante.
Quiero que por ahora se lleven el concepto que ese parámetro sirvió para autorizar a ver mi información privada al que efectuó la llamada al recurso. De esta manera introducimos el concepto de Autorización.
La autorización es el proceso mediante el cual autorizamos a alguien o algo a acceder a recursos privados que de otra manera no podrían ser accedidos.
Con acceder nos referimos a que dentro de la autorización vamos a tener que definir qué recursos y que operaciones se pueden realizar con ellos.
No es lo mismo autorización para solo lectura, que lectura / escritura.
¿Cómo logramos la autorización?
A través del protocolo OAuth.
A través del protocolo OAuth.
Partimos con la explicación de lo que NO es. OAuth no es una API o un Servicio.
Es un estándar abierto para flujos simples de autorización. Se trata de un protocolo que trabaja sobre HTTP que permite la autorización segura de una API, aplicaciones Web, etc.
OAuth nos brinda factores claves para trabajar de manera segura, el primero de ellos es 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 y por ultimo Disponibilidad ya que los datos siempre estarán disponibles en el momento que se necesiten.
OAuth no es el encargado de realizar tareas de login y autenticación. Se encarga de verificar los permisos que tengan los usuarios sobre recursos.
Recuerden entonces que OAuth es un protocolo de autorización.
Hay dos versiones de OAuth: OAuth 1.0a y luego salió la versión OAuth 2.0
Estas especificaciones son completamente diferentes unas de otras y no pueden ser usadas juntas. Tampoco hay retrocompatibilidad entre ellas.
¿Cual es más popular? - Sin dudas OAuth 2.0 es el más usado. Entonces si me lo permiten a partir de ahora cuando hable de OAuth estaré hablando de OAuth 2.0
¿Quien usa OAuth?
Instagram, Facebook, Twiter, GitHub, Google, Mercadolibre entre muchísimas empresas más.
¿Cómo funciona?
Hay 4 modos de funcionamiento posibles. Se denominan Grant Types. Cada uno es para diferentes propósitos y se usa de una manera diferente en cada uno de ellos. Dependiendo del servicio que se está construyendo quizás necesites usar uno omás de estos Grant Types.
Ellos son:
The Authorization Code Grant Type The authorization code grant type Este tipo de autorización se utiliza cuando construimos aplicaciones web en modo servidor (server-side). Si queremos implementar el flujo de OAuth en un server-side con web frameworks como por ejemplo, Groovy on Rails, Ruby on Rails, Java, etc. Authorization code es la forma de hacerlo
The Implicit Grant Type The implicit grant type está destinado a ser usado en aplicaciones web que trabajan del lado del cliente (client-side), (como JavaScript y Angular) que no necesitan tener un componente en modo servidor (server-side). O también cualquier aplicación mobile que usa un web browser mobile.
Y los próximos 2 que a efectos de esta presentación no entraremos en mucho detalle pero esta bueno explicarlos brevemente.
The Password Credentials Grant Type Password credentials grant type puede ser usado tanto para aplicaciones web como mobile. Simplifica el flujo de autorización solamente consultado nombre de usuario y contraseña. Es muy común usarlo en aplicaciones nativas como Android y IPhone o en aplicaciones web. La desventaja de este esquema es que solamente la web / mobile nativas puede usar esto.
The Client Credentials Grant Type Client credentials grant type es usado para aplicaciones que necesitan realizar tareas no relacionadas con los usuarios. Actualizar metadatos, leer métricas (Cuantos usuarios se loguean en nuestro servicio), etc. Si estamos construyendo una aplicación que hagas procesos de background que no interactúan con un usuario en un web browser este es el grant type que debemos utilizar.
Vamos a explicar como sería el flujo de Autorización para los dos primeros, es decir
para aplicaciones client-side y para aplicaciones server-side
Como mencionamos anteriormente hay dos flujos que se pueden implementar
Implicit para aplicaciones que trabajan en el lado del cliente
Authorization conde para aplicaciones que trabajan del lado del servidor
El flujo en aplicaciones que trabajan del lado del cliente solamente lo vamos a explicar dejando en más detalle al flujo en modo servidor
Vamos entonces con el flujo de autorización de aplicaciones que ejecutan código del lado del servidor.
El access token que vemos en ambos flujos es el que utilizamos para acceder a los recursos
Con todo lo que hemos visto vamos a ponerlo en práctica y hacer un flujo completo de Autorización en Mercadolibre
El primer paso que necesitamos es crear una aplicación.
Esta aplicación trabajará interactuando con la API de Mercadolibre y será aquella a la que los usuarios le van a dar permisos para poder trabajar en su nombre y acceder a sus recursos Públicos y Privados (Autorización). Para ello ingresamos a htttp://applications.mercadolibre.com. Seleccionamos el país en el cual deseamos que opere la aplicación
En la pantalla principal encontraremos un botón para crear una nueva aplicación el que nos llevará a un formulario.
En la primera parte de este deberemos ingresar un Nombre a nuestra aplicación lo suficientemente descriptivo para que los usuarios nos reconozcan, un nombre corto para identificarla rápidamente y una descripción de lo que se podrá hacer con la misma.
Siguiendo con el formulario deberemos ingresar la URL donde trabajará mi aplicación. Por ejemplo si estoy desarrollando algo en mi computadora local, puedo utilizar https://localhost/mercadolibre
Si estoy trabajando con JavaScripts deberé poner todas las URLs con las que trabajaré y por ultimo ingresar los Scopes de mi integración.
¿Qué son los scopes? ¿Recuerdan que en el flujo de autorización autorizamos a alguien o algo para que opere sobre nuestros recursos?
Aquí definimos las acciones que van a poder hacer con ellos a través de los scopes
El Scope Read comúnmente llamado de lectura, nos sirve para obtener la información privada que estemos autorizados a consultar. Por ejemplo a través de una llamada GET como vimos anteriormente en recursos privados obtenemos la información privada del usuario NLEGRESTI
El Scope Wirte comúnmente llamado de Escritura. Nos permite insertar, modificar o eliminar elementos (A través de llamadas POST PUT Y DELETE respectivamente).
Un usuario que autorice una aplicación con este SCOPE Puede publicar un ítem en nombre del mismos dentro de Mercadolibre.
Por último el scope Offline Access nos permite seguir trabajando con las credenciales de un usuario sin que este deba brindarnos su autorización cada cierto periodo de tiempo. Es muy útil cuando debemos crear cron jobs para ejecutar acciones masivas como actualización de stock
Una vez completado el formulario (lado izquierdo) obtendremos dos datos muy importantes, entre ellos App Id y Secret Key esenciales para nuestra integración. Lo utilizaremos para requerir la autorización del usuarios y así obtendremos un access_token (el que vimos anteriormente).
Del lado derecho tenemos el mensaje que se muestra al usuario para que autorize la aplicación trabajar en su nombre
Cuando el usuario autorice la aplicación se podrá obtener el access_token a través de los fjujos de autorización que vimos anteriormente.