SlideShare une entreprise Scribd logo
1  sur  45
Qué es eso de OAuth2 y
cómo se implementa en
Symfony2 (y otros!)
Sobre el tio que te habla
Miguel Ángel Sánchez (@slaimer)
● 4 años picando PHP
● Varios años con Symfony2
● Backend Developer en Origo.by
● Ciencia ficción clásica y moderna
● Mail (mangel.snc@gmail.com)
Un poco de teoría
OAuth (Open Authorization) es un protocolo abierto que permite autorización
segura de una API de modo estándar y simple para aplicaciones de escritorio,
móviles y web.
Para desarrolladores de consumidores, OAuth es un método de interactuar con
datos protegidos y publicarlos.
Para desarrolladores de proveedores de servicio, OAuth proporciona a los
usuarios un acceso a sus datos al mismo tiempo que protege las credenciales
de su cuenta.
En otras palabras, OAuth permite a un usuario del sitio A compartir su
información en el sitio A (proveedor de servicio) con el sitio B (llamado
consumidor) sin compartir toda su identidad.
Autorización o autenticación?
Autorización o autenticación?
Autorización o autenticación?
Autorización: Permitir acceso a un tercero por
parte del propietario a su información.
Autenticación: Demostrar ser quien dices ser.
OAuth debería utilizarse con propósitos de
autorización + autenticación, pero no siempre es
el caso.
Elementos que intervienen en una
transacción OAuth
• Scopes / ámbitos / alcances
• Roles / Actores
• Grant Types (Tipos de autorización)
Scopes
La información del usuario suele ir clasificada
bajo determinados scopes (ámbitos,
alcances… etc).
Esto es muy útil para permitir acceder a sólo a
la parte imprescindible de la información del
propietario.
Actores
En todo escenario de autenticación contamos
con 3 actores o roles que interactúan entre
ellos:
● Aplicaciones (Clients)
● API (Servers)
● Usuario (Owners)
Actores: Aplicaciones
Las aplicaciones son el cliente de nuestra API.
Las aplicaciones pueden ser propias o de
terceras partes.
La aplicación se conecta al API para obtener
información, previa autorización del owner.
Actores: API
El API es el servidor de recursos.
Sirve los recursos en distintos formatos conocidos
por el cliente.
Gestiona el acceso a los recursos para evitar
accesos ilegales.
Actores: Usuario
Es el propietario de los recursos.
Puede ceder permisos (autorizar) a las
aplicaciones para que accedan a sus recursos.
Él mismo puede “consumir” sus recursos.
Tipos de Autorización
Según el tipo de aplicación podemos (y se recomienda) usar un tipo
distinto de autenticación.
Toda autenticación requiere de al menos 2 parámetros:
● Client ID
● Client Secret
● Redirect URL (opcional, solo en algunos tipos de autorización).
Para poder autenticarse en el API, necesitamos que el app que accede
a los datos esté registrada (tenga un Client ID) y tenga una contraseña
de acceso (Client Secret).
Dependiendo del tipo de autorización, se requiere una URL de
redirección donde el API devuelve el token de acceso.
Authorization Code
Authorization Code 1/6
Se usa para aplicaciones basadas en Web
Server (es el código servidor quien accede al
API).
Por ejemplo, cuando permitimos a una
aplicación acceder a nuestros datos de
Facebook.
Authorization Code 2/6
Normalmente la autenticación se inicia con un
enlace que apunta a nuestra API:
Esto nos lleva a una pantalla de autorización
como la siguiente:
GET
https://oauth2server.com/auth?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=https://oauth2client.com/get-auth
Authorization Code 3/6
Después de procesar la petición, devuelve el
código de autenticación al cliente:
GET https://oauth2client.com/get-auth?code=AUTH_CODE
Authorization Code 4/6
Con el código recibido, el cliente hace una
petición para obtener un token:
POST
https://oauth2server.com/token
grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=https://oauth2client.com/handle-token&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
Authorization Code 5/6
Y el cliente finalmente recibe su token:
{
“access_token”: “RsT5OjbzRn430zqMLgV3Ia”
}
Authorization Code 5/6
Y el cliente finalmente recibe su token:
… o un error:
{
“access_token”: “RsT5OjbzRn430zqMLgV3Ia”
}
{
“error”: “invalid auth_code”
}
Authorization Code 6/6
Con el token en su poder, el cliente ya está
preparado para acceder a recursos.
Implicit
Implicit 1/4
Se usa con aplicaciones basadas en
navegador (aplicaciones Javascript
mayormente).
Es MUY similar al Authorization Code, solo que
más simple.
Implicit 2/4
Normalmente la autenticación se inicia con un
enlace que apunta a nuestra API:
GET
https://oauth2server.com/auth?
response_type=implicit&
client_id=CLIENT_ID&
redirect_uri=https://oauth2client.com/handle-token
Implicit 3/4
Después de procesar la petición, devuelve el
token directamente en la URL:
GET https://oauth2client.com/handle-token#token=ACCESS_TOKEN
Implicit 3/4
Después de procesar la petición, devuelve el
token directamente en la URL:
… o un error:
GET https://oauth2client.com/handle-token#token=ACCESS_TOKEN
GET https://oauth2client.com/handle-token#error=access_denied
Implicit 4/4
Con el token en su poder, el cliente ya está
preparado para acceder a recursos.
Password
Password 1/3
Se usa normalmente cuando el desarrollador de la
aplicación y del API es el mismo.
Se usa un esquema user/password para obtener un token
directamente
No requiere el uso del client_secret, ya que la naturaleza
de las apps que emplean este tipo no permiten una
protección del mismo.
Password 2/3
Simple como el mecanismo de un botijo:
Enviamos cliente_id, user y password y recibimos un
token.
POST
https://oauth2server.com/token
grant_type=password&
client_id=CLIENT_ID&
username=USERNAME&
password=PASSWORD
La sencillez de este método lo hace ideal para aplicaciones
basadas en un API existente (p.ej clientes móviles).
OJO!
FOSOAuthServerBundle no implementa correctamente este tipo
de autenticación, ya que obliga a enviar el client_secret.
https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/115
Password 3/3
Client Credentials
Client Credentials 1/2
Este es el tipo quizá menos habitual. Se usa
para acceder a datos del API fuera del contexto
de cualquier usuario.
Es como un acceso de “mantenimiento”.
Client Credentials 2/2
Es el más simple de todos, únicamente enviamos el
client_id y el client_secret y nos devuelve un token
POST
https://oauth2server.com/token
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
Realizar llamadas autenticadas
Llamadas autenticadas
Todo esto que hemos visto antes tiene como
única finalidad poder acceder a recursos
protegidos por el API.
¿Cómo hacemos para acceder a estos
recursos?
Llamadas autenticadas
De nuevo se trata de un procedimiento muy sencillo:
Únicamente debemos de hacer todas las llamadas al API
incluyendo una cabecera Authorization como esta:
Authorization: Bearer MzZlZDk0YmZiMzYyYjU0M...NmYWZhMzUxMDIxN2VjMg
Alternativas
● HAWK
o https://github.com/hueniverse/hawk
o Diseñado por Eran Hammer, editor de la especificación OAuth2
o Solo para autenticación
● Symfony2 SimplePreAuthenticatorInterface
o http://symfony.com/doc/current/cookbook/security/api_key_authenticat
ion.html
o Disponible desde v2.4
o Solo autenticación
● OpenID
o http://openid.net/
o Solo autenticación
Implementar OAuth en Symfony2
• FOSOAuthServerBundle
Implementar OAuth en Symfony2
• FOSOAuthServerBundle
bshaffer/oauth-server-php
Dispone de un bundle para Symfony.
Fácilmente integrable en:
• Silex
• Slim
• Drupal
• Laravel
Zend lo ha utilizado para Apigility
Preguntas…?
O cervezas???
Preguntas…?
O cervezas???
Gracias por venir!!!

Contenu connexe

Tendances (6)

MARACATU | Antropologia da cultura
MARACATU | Antropologia da culturaMARACATU | Antropologia da cultura
MARACATU | Antropologia da cultura
 
Samba além do carnaval
Samba além do carnavalSamba além do carnaval
Samba além do carnaval
 
Danças folclóricas - África
Danças folclóricas - África Danças folclóricas - África
Danças folclóricas - África
 
Introdução a eletrodinâmica 3ed griffiths respostas - inglês
Introdução a eletrodinâmica 3ed griffiths   respostas - inglêsIntrodução a eletrodinâmica 3ed griffiths   respostas - inglês
Introdução a eletrodinâmica 3ed griffiths respostas - inglês
 
Capoeira
CapoeiraCapoeira
Capoeira
 
Gênero teatral
Gênero teatralGênero teatral
Gênero teatral
 

En vedette

En vedette (6)

OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)
 
Conferencia la Innovacion hay que bajarla de las nubes
Conferencia la Innovacion hay que bajarla de las nubesConferencia la Innovacion hay que bajarla de las nubes
Conferencia la Innovacion hay que bajarla de las nubes
 
GFI - Seguridad en tus APIs
GFI - Seguridad en tus APIsGFI - Seguridad en tus APIs
GFI - Seguridad en tus APIs
 
OAUTH introducción y entretenida explicación.
OAUTH introducción y entretenida explicación.OAUTH introducción y entretenida explicación.
OAUTH introducción y entretenida explicación.
 
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
 
Componentes De La Estrategia
Componentes De La EstrategiaComponentes De La Estrategia
Componentes De La Estrategia
 

Similaire à Qué es eso de OAuth y como se implementa en Symfony2 (y otros)

3. certificados y pki
3. certificados y pki3. certificados y pki
3. certificados y pki
1 2d
 

Similaire à Qué es eso de OAuth y como se implementa en Symfony2 (y otros) (20)

Meetup TCMS OAuth2
Meetup TCMS OAuth2Meetup TCMS OAuth2
Meetup TCMS OAuth2
 
Seguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developerSeguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developer
 
Presentación sso con cas
Presentación sso con casPresentación sso con cas
Presentación sso con cas
 
tutorial guide using the api - 2015 espana seminario tecnico
tutorial guide using the api - 2015 espana seminario tecnicotutorial guide using the api - 2015 espana seminario tecnico
tutorial guide using the api - 2015 espana seminario tecnico
 
Presentacion-Oauth
Presentacion-OauthPresentacion-Oauth
Presentacion-Oauth
 
OAuth and OpenID
OAuth and OpenIDOAuth and OpenID
OAuth and OpenID
 
3. certificados y pki
3. certificados y pki3. certificados y pki
3. certificados y pki
 
Presentación de Lyracons en el Meet Magento Argentina 2017
Presentación de Lyracons en el Meet Magento Argentina 2017 Presentación de Lyracons en el Meet Magento Argentina 2017
Presentación de Lyracons en el Meet Magento Argentina 2017
 
SSO mobile 3 opciones
SSO mobile 3 opcionesSSO mobile 3 opciones
SSO mobile 3 opciones
 
Open ID
Open IDOpen ID
Open ID
 
Construyendo APIs Seguras y Escalables
Construyendo APIs Seguras y Escalables Construyendo APIs Seguras y Escalables
Construyendo APIs Seguras y Escalables
 
Seguridad para aplicaciones web java con json web tokens (jwt) 2020
Seguridad para aplicaciones web java con json web tokens (jwt)  2020Seguridad para aplicaciones web java con json web tokens (jwt)  2020
Seguridad para aplicaciones web java con json web tokens (jwt) 2020
 
APEX Office Hours - Two Factor Authentication
APEX Office Hours - Two Factor AuthenticationAPEX Office Hours - Two Factor Authentication
APEX Office Hours - Two Factor Authentication
 
Entendiendo o auth
Entendiendo o authEntendiendo o auth
Entendiendo o auth
 
Oauth v2-rev
Oauth v2-revOauth v2-rev
Oauth v2-rev
 
Borghello Open Id
Borghello Open IdBorghello Open Id
Borghello Open Id
 
Asp seguridad
Asp seguridad Asp seguridad
Asp seguridad
 
Tema 3 - Seguridad en Internet
Tema 3 - Seguridad en InternetTema 3 - Seguridad en Internet
Tema 3 - Seguridad en Internet
 
Analizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BIAnalizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BI
 
Introducción al Protocolo OAuth 2.0
Introducción al Protocolo OAuth 2.0Introducción al Protocolo OAuth 2.0
Introducción al Protocolo OAuth 2.0
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (12)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

Qué es eso de OAuth y como se implementa en Symfony2 (y otros)

  • 1. Qué es eso de OAuth2 y cómo se implementa en Symfony2 (y otros!)
  • 2. Sobre el tio que te habla Miguel Ángel Sánchez (@slaimer) ● 4 años picando PHP ● Varios años con Symfony2 ● Backend Developer en Origo.by ● Ciencia ficción clásica y moderna ● Mail (mangel.snc@gmail.com)
  • 3. Un poco de teoría OAuth (Open Authorization) es un protocolo abierto que permite autorización segura de una API de modo estándar y simple para aplicaciones de escritorio, móviles y web. Para desarrolladores de consumidores, OAuth es un método de interactuar con datos protegidos y publicarlos. Para desarrolladores de proveedores de servicio, OAuth proporciona a los usuarios un acceso a sus datos al mismo tiempo que protege las credenciales de su cuenta. En otras palabras, OAuth permite a un usuario del sitio A compartir su información en el sitio A (proveedor de servicio) con el sitio B (llamado consumidor) sin compartir toda su identidad.
  • 6. Autorización o autenticación? Autorización: Permitir acceso a un tercero por parte del propietario a su información. Autenticación: Demostrar ser quien dices ser. OAuth debería utilizarse con propósitos de autorización + autenticación, pero no siempre es el caso.
  • 7. Elementos que intervienen en una transacción OAuth • Scopes / ámbitos / alcances • Roles / Actores • Grant Types (Tipos de autorización)
  • 8. Scopes La información del usuario suele ir clasificada bajo determinados scopes (ámbitos, alcances… etc). Esto es muy útil para permitir acceder a sólo a la parte imprescindible de la información del propietario.
  • 9.
  • 10. Actores En todo escenario de autenticación contamos con 3 actores o roles que interactúan entre ellos: ● Aplicaciones (Clients) ● API (Servers) ● Usuario (Owners)
  • 11. Actores: Aplicaciones Las aplicaciones son el cliente de nuestra API. Las aplicaciones pueden ser propias o de terceras partes. La aplicación se conecta al API para obtener información, previa autorización del owner.
  • 12. Actores: API El API es el servidor de recursos. Sirve los recursos en distintos formatos conocidos por el cliente. Gestiona el acceso a los recursos para evitar accesos ilegales.
  • 13. Actores: Usuario Es el propietario de los recursos. Puede ceder permisos (autorizar) a las aplicaciones para que accedan a sus recursos. Él mismo puede “consumir” sus recursos.
  • 14. Tipos de Autorización Según el tipo de aplicación podemos (y se recomienda) usar un tipo distinto de autenticación. Toda autenticación requiere de al menos 2 parámetros: ● Client ID ● Client Secret ● Redirect URL (opcional, solo en algunos tipos de autorización). Para poder autenticarse en el API, necesitamos que el app que accede a los datos esté registrada (tenga un Client ID) y tenga una contraseña de acceso (Client Secret). Dependiendo del tipo de autorización, se requiere una URL de redirección donde el API devuelve el token de acceso.
  • 16. Authorization Code 1/6 Se usa para aplicaciones basadas en Web Server (es el código servidor quien accede al API). Por ejemplo, cuando permitimos a una aplicación acceder a nuestros datos de Facebook.
  • 17. Authorization Code 2/6 Normalmente la autenticación se inicia con un enlace que apunta a nuestra API: Esto nos lleva a una pantalla de autorización como la siguiente: GET https://oauth2server.com/auth? response_type=code& client_id=CLIENT_ID& redirect_uri=https://oauth2client.com/get-auth
  • 18.
  • 19. Authorization Code 3/6 Después de procesar la petición, devuelve el código de autenticación al cliente: GET https://oauth2client.com/get-auth?code=AUTH_CODE
  • 20. Authorization Code 4/6 Con el código recibido, el cliente hace una petición para obtener un token: POST https://oauth2server.com/token grant_type=authorization_code& code=AUTH_CODE& redirect_uri=https://oauth2client.com/handle-token& client_id=CLIENT_ID& client_secret=CLIENT_SECRET
  • 21. Authorization Code 5/6 Y el cliente finalmente recibe su token: { “access_token”: “RsT5OjbzRn430zqMLgV3Ia” }
  • 22. Authorization Code 5/6 Y el cliente finalmente recibe su token: … o un error: { “access_token”: “RsT5OjbzRn430zqMLgV3Ia” } { “error”: “invalid auth_code” }
  • 23. Authorization Code 6/6 Con el token en su poder, el cliente ya está preparado para acceder a recursos.
  • 25. Implicit 1/4 Se usa con aplicaciones basadas en navegador (aplicaciones Javascript mayormente). Es MUY similar al Authorization Code, solo que más simple.
  • 26. Implicit 2/4 Normalmente la autenticación se inicia con un enlace que apunta a nuestra API: GET https://oauth2server.com/auth? response_type=implicit& client_id=CLIENT_ID& redirect_uri=https://oauth2client.com/handle-token
  • 27. Implicit 3/4 Después de procesar la petición, devuelve el token directamente en la URL: GET https://oauth2client.com/handle-token#token=ACCESS_TOKEN
  • 28. Implicit 3/4 Después de procesar la petición, devuelve el token directamente en la URL: … o un error: GET https://oauth2client.com/handle-token#token=ACCESS_TOKEN GET https://oauth2client.com/handle-token#error=access_denied
  • 29. Implicit 4/4 Con el token en su poder, el cliente ya está preparado para acceder a recursos.
  • 31. Password 1/3 Se usa normalmente cuando el desarrollador de la aplicación y del API es el mismo. Se usa un esquema user/password para obtener un token directamente No requiere el uso del client_secret, ya que la naturaleza de las apps que emplean este tipo no permiten una protección del mismo.
  • 32. Password 2/3 Simple como el mecanismo de un botijo: Enviamos cliente_id, user y password y recibimos un token. POST https://oauth2server.com/token grant_type=password& client_id=CLIENT_ID& username=USERNAME& password=PASSWORD
  • 33. La sencillez de este método lo hace ideal para aplicaciones basadas en un API existente (p.ej clientes móviles). OJO! FOSOAuthServerBundle no implementa correctamente este tipo de autenticación, ya que obliga a enviar el client_secret. https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/115 Password 3/3
  • 35. Client Credentials 1/2 Este es el tipo quizá menos habitual. Se usa para acceder a datos del API fuera del contexto de cualquier usuario. Es como un acceso de “mantenimiento”.
  • 36. Client Credentials 2/2 Es el más simple de todos, únicamente enviamos el client_id y el client_secret y nos devuelve un token POST https://oauth2server.com/token grant_type=client_credentials& client_id=CLIENT_ID& client_secret=CLIENT_SECRET
  • 38. Llamadas autenticadas Todo esto que hemos visto antes tiene como única finalidad poder acceder a recursos protegidos por el API. ¿Cómo hacemos para acceder a estos recursos?
  • 39. Llamadas autenticadas De nuevo se trata de un procedimiento muy sencillo: Únicamente debemos de hacer todas las llamadas al API incluyendo una cabecera Authorization como esta: Authorization: Bearer MzZlZDk0YmZiMzYyYjU0M...NmYWZhMzUxMDIxN2VjMg
  • 40. Alternativas ● HAWK o https://github.com/hueniverse/hawk o Diseñado por Eran Hammer, editor de la especificación OAuth2 o Solo para autenticación ● Symfony2 SimplePreAuthenticatorInterface o http://symfony.com/doc/current/cookbook/security/api_key_authenticat ion.html o Disponible desde v2.4 o Solo autenticación ● OpenID o http://openid.net/ o Solo autenticación
  • 41. Implementar OAuth en Symfony2 • FOSOAuthServerBundle
  • 42. Implementar OAuth en Symfony2 • FOSOAuthServerBundle
  • 43. bshaffer/oauth-server-php Dispone de un bundle para Symfony. Fácilmente integrable en: • Silex • Slim • Drupal • Laravel Zend lo ha utilizado para Apigility