Interfaz de programación de aplicaciones (Application Programming Interface). Es un conjunto de rutinas que provee acceso a funciones de un determinado software. Son utilizadas por los programadores para construir sus aplicaciones sin necesidad de volver a programar funciones ya hechas por otros, reutilizando código que se sabe que está probado y que funciona correctamente.
La especificación de OAuth 2.0 se puede encontrar en el RFC 6749
Acceso limitado a ciertos recursos mediante autorización.
OAuth viene de Open Authorization, es decir, dar a “otros” autorización para acceder de forma limitada a ciertos recursos.
En resumen:
Dado que hay riesgo en dar credenciales a terceros, OAuth emplea un token de acceso. Este token es el usado para obtener acceso a los recursos protegidos.
Roles:
Flujo del protocolo OAuth:
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
Tipos de autorizaciones (authorization grant types):
El más utilizado es el de Authorization Code.
Un token de acceso (access token) se usa para poder acceder a un recurso protegido.
El refresh token es lo que se utiliza para conseguir un nuevo token de acceso. Se utiliza cuando el token de acceso tiene un tiempo de vida limitado.
Antes de comenzar el flujo del protocolo, el cliente debe haber conseguir del Authentication Server un Client ID.
El cliente / aplicación hace una petición HTTP al endpoint de su interés, envía su ID y autenticación al Authorization Server para obtener el código de autorización.
El cliente envía el código de autorización al Authorization Server y este le devuelve el access token.
El cliente hace una solicitud HTTP al Authorization Server y este le devuelve: