Tabla de Contenidos
API
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.
Acceso
OAuth
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:
- OAuth permite acceso a terceros/otros (clientes o aplicaciones)
- Provee acceso limitado (autorizado)
- Acceso a un servicio web (vía HTTP)
- OAuth 1.0 está obsoleto
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:
- Resource Owner: propietario del recurso al que se quiere acceder.
- Resource Server: provee los recursos
- Cliente / Aplicación (third party): quien accede a los recursos
- Authorization Server: provee el token de acceso al cliente/aplicación para acceder a los recursos.
Flujo del protocolo OAuth:
- El cliente hace una petición de autorización al Resource Owner
- El Resource Owner responde con una permiso de acceso (Authorization Grant) al cliente indicándole que tiene autorización para acceder a los recursos.
- El cliente envía el permiso obtenido al Authorization Server que es responsable de proteger los recursos del Resource Owner
- El Authorization Server envía al cliente el token de acceso.
- El cliente usa el token de acceso con el Resource Server para obtener los recursos protegidos.
- El Resource Server envía los recursos solicitados por el cliente y a los que tiene autorización.
+--------+ +---------------+
| |--(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):
- Authorization code: el cliente pide autorización al propietario del recursos a través del Authorization Server. El propietario del recursos tiene que acceder al Authorization Server para darle permisos.
- Implicit: los recursos de solicitan a través de un programa.
- Resource Owner: permisos totales sobre los recursos.
- Client credencials: nunca se le pregunta al propietario del recursos por permiso.
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.
Authorization Code Grant
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.
Registro de clientes
El cliente hace una solicitud HTTP al Authorization Server y este le devuelve:
- Client ID
- Client Secret (cuando el tipo de cliente es confidencial)
APIs públicas
- Colección de APIs públicas (GitHub)
