En esta charla para PHP Valencia, aprenderemos las bases de OAuth: actores, flujos y conceptos básicos.
Además veremos como implementar nuestro propio servidor y cliente OAuth con PHP y con Symfony.
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.
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.
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.
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
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
que apunta a nuestra API: GET https://oauth2server.com/auth? response_type=implicit& client_id=CLIENT_ID& redirect_uri=https://oauth2client.com/handle-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
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.
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
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
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
sencillo: Únicamente debemos de hacer todas las llamadas al API incluyendo una cabecera Authorization como esta: Authorization: Bearer MzZlZDk0YmZiMzYyYjU0M...NmYWZhMzUxMDIxN2VjMg
editor de la especificación OAuth2 o Solo para autenticación • Symfony2 SimplePreAuthenticatorInterface o http://symfony.com/doc/current/cookbook/security/ api_key_authentication.html o Disponible desde v2.4 o Solo autenticación • OpenID o http://openid.net/ o Solo autenticación