Este componente proporciona la implementación del protocolo OAuth2 en los componentes del lado del servidor.
Este componente proporciona la implementación del protocolo OAuth2 en los componentes del lado del servidor.
Los componentes de servidor tienen una propiedad llamada Authorization.OAuth.OAuth2 donde puede asignar una instancia de TsgcHTTP_OAuth2_Server; si la autenticación está habilitada y la propiedad OAuth2 está asociada al componente OAuth2 Server, las solicitudes WebSocket y HTTP requieren un Bearer Token para ser procesadas; de lo contrario, la conexión se cerrará automáticamente.
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
Server.Authentication.Enabled := True;
Server.Authentication.OAuth.OAuth2 := OAuth2;
El servidor admite los siguientes tipos de autorización:
- auth2Code: Se utiliza para realizar la autenticación y autorización en la mayoría de los tipos de aplicaciones, incluidas las aplicaciones de página única, las aplicaciones web y las aplicaciones instaladas de forma nativa. El flujo permite a las aplicaciones adquirir de forma segura access_tokens que pueden usarse para acceder a recursos protegidos, así como tokens de actualización para obtener access_tokens adicionales y tokens ID para el usuario que ha iniciado sesión.
- auth2ClientCredentials: Este tipo de concesión se usa habitualmente para interacciones servidor a servidor que deben ejecutarse en segundo plano, sin interacción inmediata con el usuario. Este tipo de aplicaciones suele denominarse daemons o cuentas de servicio.
- password (Credenciales de Contraseña del Propietario del Recurso): Permite que una aplicación inicie sesión del usuario gestionando directamente sus credenciales. El cliente envía el nombre de usuario y la contraseña del usuario al endpoint de token.
- urn:ietf:params:oauth:grant-type:device_code (Device Code): Concesión de autorización de dispositivo según RFC 8628. Permite que los dispositivos con entrada limitada (televisores inteligentes, dispositivos IoT) obtengan autorización del usuario haciendo que este autorice desde un dispositivo secundario.
El tipo de autorización puede personalizarse al registrar la aplicación; por defecto, se admiten todos los tipos de autorización.
EndPoints
De forma predeterminada, el componente está configurado con los siguientes endpoints para gestionar la autorización y la solicitud de token
Autorización: /sgc/oauth2/auth
Token: /sgc/oauth2/token
Revocation: /sgc/oauth2/revoke
Introspection: /sgc/oauth2/introspect
Autorización de Dispositivo: /sgc/oauth2/device
Verificación de dispositivo: /sgc/oauth2/device/verify
Por tanto, si el servidor está escuchando en el puerto 443 y el dominio es www.esegece.com, los EndPoints serán:
Autorización: https://www.esegece.com/sgc/oauth2/auth
Token: https://www.esegece.com/sgc/oauth2/token
Revocation: https://www.esegece.com/sgc/oauth2/revoke
Introspection: https://www.esegece.com/sgc/oauth2/introspect
Device Authorization: https://www.esegece.com/sgc/oauth2/device
Verificación del dispositivo: https://www.esegece.com/sgc/oauth2/device/verify
Los puntos de enlace se pueden configurar en la propiedad OAuth2Options.
Por defecto, PKCE (una extensión del flujo de Código de Autorización para prevenir ataques CSRF e inyección de código de autorización) está habilitado.
Configuración
Antes de poder iniciar el proceso OAuth2, debe registrar qué aplicaciones estarán disponibles; esto se hace usando la propiedad Apps del componente de servidor OAuth2.
Registrar Aplicación
Use Apps.AddApp para añadir una nueva aplicación al servidor OAuth2; debe establecer los siguientes parámetros:
- App Name:
es el nombre de la aplicación. Ejemplo: MyApp
- RedirectURI:
es el destino al que se redirigirán las respuestas. Ejemplo: http://127.0.0.1:8080
- ClientId:
es información pública y es el ID del cliente.
- ClientSecret:
debe mantenerse confidencial.
Opcionalmente puede establecer los siguientes parámetros:
- ExpiresIn:
de forma predeterminada son 3600 segundos, por lo que el token expirará en 1 hora;
puede establecer un valor mayor si lo necesita.
- RefreshToken:
de forma predeterminada, los tokens de actualización están habilitados; si no es así, establezca este parámetro
en false.
- AllowedGrantTypes: por defecto se admiten todos los tipos de concesión (auth2Code y auth2ClientCredentials), pero el servidor puede configurarse para permitir solo la Autorización por Código o solo las Credenciales de Cliente.
Eliminar aplicación
Use Apps.RemoveApp para eliminar una App existente.
AddToken
Si el servidor se ha reiniciado mientras había algunos tokens emitidos, puede recuperarlos usando el método AddToken antes de iniciar el servidor OAuth2 y después de registrar las aplicaciones
- AppName: el nombre de la aplicación.
- Token: token de acceso.
- Expires: fecha de expiración del token.
- RefreshToken: token de actualización.
RemoveToken
Elimina un token ya emitido.
OAuth2Options
La propiedad OAuth2Options permite configurar los endpoints del servidor y las funciones opcionales.
Revocación
Revocación de tokens según RFC 7009. Cuando está habilitada, los clientes pueden revocar tokens de acceso o de actualización emitidos previamente.
- OAuth2Options.Revocation.Enabled: establezca en True para habilitar el punto de extremo de revocación.
- OAuth2Options.Revocation.URL: la ruta URL del endpoint. Predeterminado: /sgc/oauth2/revoke
Introspección
Introspección de tokens según RFC 7662. Cuando está habilitada, los servidores de recursos pueden consultar al servidor de autorización para determinar el estado activo y los metadatos de un token.
- OAuth2Options.Introspection.Enabled: establézcalo en True para habilitar el endpoint de introspección.
- OAuth2Options.Introspection.URL: la ruta de URL del endpoint. Valor predeterminado: /sgc/oauth2/introspect
DeviceAuthorization
Device Authorization Grant según RFC 8628. Cuando está habilitado, los dispositivos con entrada limitada pueden solicitar autorización haciendo que el usuario autorice desde un dispositivo secundario.
- OAuth2Options.DeviceAuthorization.Enabled: establezca en True para habilitar el endpoint de autorización de dispositivos.
- OAuth2Options.DeviceAuthorization.URL: la ruta URL del endpoint para solicitudes de código de dispositivo. Predeterminado: /sgc/oauth2/device
- OAuth2Options.DeviceAuthorization.VerificationURL: la ruta URL del endpoint para la página de verificación del usuario. Valor predeterminado: /sgc/oauth2/device/verify
- OAuth2Options.DeviceAuthorization.ExpiresIn: el tiempo de vida en segundos del código de dispositivo. Valor predeterminado: 600 (10 minutos).
- OAuth2Options.DeviceAuthorization.Interval: el intervalo mínimo de sondeo en segundos que el cliente debe usar al consultar el endpoint de token. Predeterminado: 5.