## ¿Qué es OAuth2?
* **OAuth** = **Open** + **Auth**orization
* OAuth 2.0 - Es un Framework de Autorización versión 2.0
* Es un protocolo abierto de autorización
* Permite la delegación de permisos sobre recursos a otras aplicaciones
---
## ¿Qué es Autenticación?
- Proceso para establecer la **identidad de un usuario**
- Proceso de verificación de **Usuario y Contraseña**
---
## ¿Qué es Autorización?
- Proceso para **controlar acciones** de usuarios
- Proceso de validación de acceso a **recursos**
- Determinar la autoridad para realizar una acción
---
## Esquema de Rol OAuth2

---
## Esquema de Delegación

---
## Tipos de Grant Type
- Authorization Code
- PKCE
- Client Credentials
- **Password Grant**
- Refresh Token
---
## ¿Qué es OpenID?
- Es un protocolo simple que agrega la funcionalidad de identidad al Framework OAuth 2.0.
- Permite a los clientes verificar la identidad del usuario final basándose en la autenticación realizada por un servidor de autorización
---
## Esquema de OpenID

---
## ¿Qué es JSON Web Token (JWT)?
- Es un estándar abierto (RFC 7519) que define una forma compacta y autocontenida de transmitir información de forma segura entre las partes como un objeto JSON
---
## Ejemplo JWT

---
## Estructura de un JSON Web Token (JWT)
| Header | Payload | Signature |
| -------- | -------- | -------- |
| Identifica que algoritmo es utilizado para la firma del JWT | Contiene conjunto de `Claims` or atributos estándar de un token | Validación de seguridad del token |
---
## Flujo de solicitud de token de acceso JWT

---
### Flujo de solicitud de token de acceso JWT

---
### Flujo de solicitud de token de acceso JWT
```shell=
curl --location --request
POST 'https://apigateway.siare.gov.py:9444/oauth2/token' \
--header
'Authorization: Basic MXVZNkVabV9uUHNHMjU4eFdydnZmVUx3ZlFZYTpITU9qZklaTXpmT3RFN3MzNTZJb1d3WEg1cE1h' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=enrique_mereles' \
--data-urlencode 'password=12345' \
--data-urlencode 'scope=openid profile' \
--data-urlencode 'application=' \
```
---
## Modelo de Autenticación implementado

---
## Secuencia de Autenticación

---
## Proyecto del User store manager
El WSO2 permite la creación de adaptador para la gestión de User store para ello es necesario descargar un proyecto base e implementar los métodos de
* **doListUsersWithID**: el método tiene la responsabilidad de listar los usuarios del user store y mostrarlo en la consola del WSO2 Identity Server
* **doAuthenticateWithUserName**: el método tiene la responsabilidad de autenticar al usuario utilizando `usuario` y `contraseña`
* **doGetUserClaimValuesWithID**: el método tiene la responsabilida de obtener los datos de institucion y perfil asociado al usuario
---
## Proyecto del SIARE Autenticación
El proyecto ```siare-autenticacion-back ```, tiene la responsabilida de gestionar el ciclo de vida del token, así también realiza la operación de obtención de *scope* asignado al usuario.
El api utilizado para la obtención del token es : `/seguridad/token`
---
### Referencias
- [Authorization](https://datatracker.ietf.org/doc/html/rfc6749)
- [OpenID](https://openid.net/connect/)
- [JWT](https://datatracker.ietf.org/doc/html/rfc7519)
- [Writing a Custom User Store Manager](https://is.docs.wso2.com/en/5.9.0/setup/writing-a-custom-user-store-manager/)
- [Grant Type](https://oauth.net/2/grant-types/)
{"metaMigratedAt":"2023-06-16T19:09:49.515Z","metaMigratedFrom":"YAML","title":"OAuth2","breaks":true,"description":"Esquema de Autenticación y Autorización","contributors":"[{\"id\":\"e91465d8-053e-4b6c-9d94-c55eaa5843ee\",\"add\":6553,\"del\":2642}]"}