SlideShare a Scribd company logo
1 of 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!!!

More Related Content

What's hot

Chapter 6 network security
Chapter 6   network securityChapter 6   network security
Chapter 6 network securitySyaiful Ahdan
 
Data leakage detection
Data leakage detectionData leakage detection
Data leakage detectionkalpesh1908
 
case study on cyber crime
case study on cyber crimecase study on cyber crime
case study on cyber crimeParas Kansagara
 
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...An Exploration on the Identification of Plant Leaf Diseases using Image Proce...
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...Tarun Kumar
 
Plant Disease Detection Using I.T.
Plant Disease Detection Using I.T.Plant Disease Detection Using I.T.
Plant Disease Detection Using I.T.Pruthvi7396
 
Reconnaissance and Social Engineering
Reconnaissance and Social EngineeringReconnaissance and Social Engineering
Reconnaissance and Social EngineeringVarunjeet Singh Rekhi
 
Penetration Testing Execution Phases
Penetration Testing Execution Phases Penetration Testing Execution Phases
Penetration Testing Execution Phases Nasir Bhutta
 
Web application Security tools
Web application Security toolsWeb application Security tools
Web application Security toolsNico Penaredondo
 
Introduction to ethical hacking
Introduction to ethical hackingIntroduction to ethical hacking
Introduction to ethical hackingankit sarode
 
Data Leakage Detection
Data Leakage DetectionData Leakage Detection
Data Leakage DetectionAshwini Nerkar
 
WTF is Penetration Testing v.2
WTF is Penetration Testing v.2WTF is Penetration Testing v.2
WTF is Penetration Testing v.2Scott Sutherland
 
Building an IP Reputation Engine: Tracking the Miscreants
Building an IP Reputation Engine: Tracking the MiscreantsBuilding an IP Reputation Engine: Tracking the Miscreants
Building an IP Reputation Engine: Tracking the MiscreantsAlienVault
 
Fake Currency detction Using Image Processing
Fake Currency detction Using Image ProcessingFake Currency detction Using Image Processing
Fake Currency detction Using Image ProcessingSavitaHanchinal
 
Intrusion detection system
Intrusion detection systemIntrusion detection system
Intrusion detection systemAparna Bhadran
 
Networking and penetration testing
Networking and penetration testingNetworking and penetration testing
Networking and penetration testingMohit Belwal
 
Plant Disease Detection Using ML.pptx
Plant Disease Detection Using ML.pptxPlant Disease Detection Using ML.pptx
Plant Disease Detection Using ML.pptxjmjiniyamandal
 
Passport status tracking system (1)
Passport status tracking system (1)Passport status tracking system (1)
Passport status tracking system (1)SUVITHAS2
 

What's hot (20)

Chapter 6 network security
Chapter 6   network securityChapter 6   network security
Chapter 6 network security
 
Data leakage detection
Data leakage detectionData leakage detection
Data leakage detection
 
case study on cyber crime
case study on cyber crimecase study on cyber crime
case study on cyber crime
 
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...An Exploration on the Identification of Plant Leaf Diseases using Image Proce...
An Exploration on the Identification of Plant Leaf Diseases using Image Proce...
 
Plant Disease Detection Using I.T.
Plant Disease Detection Using I.T.Plant Disease Detection Using I.T.
Plant Disease Detection Using I.T.
 
Reconnaissance and Social Engineering
Reconnaissance and Social EngineeringReconnaissance and Social Engineering
Reconnaissance and Social Engineering
 
Penetration Testing Execution Phases
Penetration Testing Execution Phases Penetration Testing Execution Phases
Penetration Testing Execution Phases
 
Web application Security tools
Web application Security toolsWeb application Security tools
Web application Security tools
 
cyber_security
cyber_securitycyber_security
cyber_security
 
Introduction to ethical hacking
Introduction to ethical hackingIntroduction to ethical hacking
Introduction to ethical hacking
 
Data Leakage Detection
Data Leakage DetectionData Leakage Detection
Data Leakage Detection
 
WTF is Penetration Testing v.2
WTF is Penetration Testing v.2WTF is Penetration Testing v.2
WTF is Penetration Testing v.2
 
Building an IP Reputation Engine: Tracking the Miscreants
Building an IP Reputation Engine: Tracking the MiscreantsBuilding an IP Reputation Engine: Tracking the Miscreants
Building an IP Reputation Engine: Tracking the Miscreants
 
Fake Currency detction Using Image Processing
Fake Currency detction Using Image ProcessingFake Currency detction Using Image Processing
Fake Currency detction Using Image Processing
 
Intrusion detection system
Intrusion detection systemIntrusion detection system
Intrusion detection system
 
Networking and penetration testing
Networking and penetration testingNetworking and penetration testing
Networking and penetration testing
 
Plant Disease Detection Using ML.pptx
Plant Disease Detection Using ML.pptxPlant Disease Detection Using ML.pptx
Plant Disease Detection Using ML.pptx
 
Computer security
Computer securityComputer security
Computer security
 
Презентация - sniffing атаки
Презентация - sniffing атакиПрезентация - sniffing атаки
Презентация - sniffing атаки
 
Passport status tracking system (1)
Passport status tracking system (1)Passport status tracking system (1)
Passport status tracking system (1)
 

Viewers also liked

OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)marcwan
 
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 nubesLuis Carlos Arraut Camargo
 
GFI - Seguridad en tus APIs
GFI - Seguridad en tus APIsGFI - Seguridad en tus APIs
GFI - Seguridad en tus APIsGFI Informática
 
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 moreRyan Weaver
 

Viewers also liked (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
 

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

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 developerCloudAppi
 
Presentación sso con cas
Presentación sso con casPresentación sso con cas
Presentación sso con casEnrique Toledo
 
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 tecnicoORCID, Inc
 
Presentacion-Oauth
Presentacion-OauthPresentacion-Oauth
Presentacion-OauthKevin Medina
 
3. certificados y pki
3. certificados y pki3. certificados y pki
3. certificados y pki1 2d
 
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 Diego Amuy
 
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) 2020Eudris Cabrera
 
APEX Office Hours - Two Factor Authentication
APEX Office Hours - Two Factor AuthenticationAPEX Office Hours - Two Factor Authentication
APEX Office Hours - Two Factor Authenticationjoelorta2
 
Asp seguridad
Asp seguridad Asp seguridad
Asp seguridad gerardd98
 
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 BISolidQ
 

Similar to 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
 

Recently uploaded

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 XXIhmpuellon
 
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 estossgonzalezp1
 
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.pptxAlan779941
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
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 ASPECTOSpptxJorgeParada26
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
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.FlorenciaCattelani
 
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 eyvanamcerpam
 
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...JohnRamos830530
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 

Recently uploaded (11)

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
 
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
 
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
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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.
 
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
 
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...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

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