Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/antoniogamiz/oauth-talk-jasyp-2019
Charla sobre OAuth en https://interferencias.tech/jasyp/
https://github.com/antoniogamiz/oauth-talk-jasyp-2019
Last synced: 22 days ago
JSON representation
Charla sobre OAuth en https://interferencias.tech/jasyp/
- Host: GitHub
- URL: https://github.com/antoniogamiz/oauth-talk-jasyp-2019
- Owner: antoniogamiz
- License: mit
- Created: 2019-04-03T21:13:58.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-26T06:56:49.000Z (over 5 years ago)
- Last Synced: 2024-10-30T01:39:51.690Z (2 months ago)
- Language: JavaScript
- Homepage:
- Size: 2.46 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Charla JASYP 2019
Charla sobre OAuth en [JASYP-2019](https://interferencias.tech/jasyp/)
### Notas
#### ¿Qué problemas intenta solucionar OAuth 2.0?
- Seguridad de APIs:
- Autenticar a los consumidores de las APIs y establecer un nivel de confianza asociado a cada uno de ellos.
- Solicitar la autorización explícita de los consumidores para ejecutar ciertas tareas.
- Disponer de herramientas que rastreen las peticiones de forma end-to-end que permitan identificar todas las partes involucradas.
- Intercambio de contraseñas.
- Delegación de autorización para acceder a los datos.#### ¿Qué es OAuth 2.0?
Es un framework de autorización flexible que describe algunos métodos (grants) para que una aplicación cliente pueda adquirir un `access token` (que representa el permiso del usuario para que la aplicación acceda a sus datos) que puede ser usado para autenticar una petición a un API endpoint.
Estándar que permite a las aplicaciones un acceso limitado (scopes) a los datos de los usuarios, sin tener que proporcionar las credenciales de dicho usuario, desacoplando la autenticación y la autorización a los datos.
### Glosario
- Resource owner (el usuario): una entidad capaz de conceder acceso a un recurso protegido. Si es una persona, se le llama end-user o usuario final.
- Resource server (la API): el servidor hosteando los recursos protegidos. Capaz de aceptar y responder a peticiones a recursos protegidos usando access tokens.
- Client: una aplicación haciendo peticiones a recursos protegidos en nombre del resource owner y con su autorización.
- Authorization server: el servidor que genera los access tokens para el cliente después de autenticar al resource owner y obtener autorización.
- First party: cliente en el que confías lo suficiente como para que gestione la autorización.
- Third party: cliente en el que no confías lo suficiente como para que gestione la autorización.### CSRF Attack
CSRF (cross-site request forgery, one-click attack o session riding) es un tipo de exploit malicioso donde comandos no autorizados son transmitidos desde un usuario a una aplicación web que confía en el usuario.
### Authorization code grant
#### Parte 1
- `audience`: (opcional, usado sólo por algunos servidores de autorización como Auth0) identificador de la API a la que la aplicación quiere acceder.
- `scope`: valores separados por espacios que representa qué permisos tendrá el token. Pueden ser cualquiera de [standard OIDC scopes](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) o customs.
- `response_type`: determina qué va a devolver el servidor de autorización.
- `client_id`: ID de la aplicación cliente.
- `state`: Valor opaco para evitar ataques [CSRF](https://auth0.com/docs/protocols/oauth2/oauth-state#redirect-users).
- `redirect_uri`: url a la que el servidor de autorización te redigirá después de haber obtenido autorización.Ejemplo de request:
```
https://YOUR_DOMAIN/authorize?
audience=YOUR_API_AUDIENCE&
scope=YOUR_SCOPE&
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https://YOUR_APP/callback&
state=YOUR_OPAQUE_VALUE
```Todos estos parámetros serán validados por el authorization server y aprovados por el cliente.
Si el usuario le concede acceso al cliente serán redirigidos a la url especificada con los siguientes parámetros:
- `code`: con el código de autorización
- `state`: con el mismo valor que antes le habíamos dado.#### Parte 2
El cliente ahora hace una petición POST al servidor de autorización con los siguientes parámetros:
- `grant_type`: con el valor `authorization_code`
- `client_id`
- `client_secret`
- `redirect_uri`: la especificada anteriormente
- `code`: código del query string.Y el servidor de autorización responderá con un objeto JSON conteniendo:
- `token_type`: normalmente Bearer
- `expires_in`: entero representando el TTL.
- `access_token`
- `refresh_token`: token para regenerar el `access_token` cuando expire.Ejemplo visual:
![authorization_code](images/authorization_code.png)