Ce composant fournit l'implémentation du protocole OAuth2 dans les composants côté serveur.
Ce composant fournit l'implémentation du protocole OAuth2 dans les composants côté serveur.
Les composants serveur disposent d'une propriété appelée Authorization.OAuth.OAuth2 à laquelle vous pouvez assigner une instance de TsgcHTTP_OAuth2_Server. Ainsi, si l'authentification est activée et que la propriété OAuth2 est attachée au composant OAuth2 Server, les requêtes WebSocket et HTTP nécessitent un jeton Bearer pour être traitées ; sinon la connexion sera fermée automatiquement.
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
Server.Authentication.Enabled := True;
Server.Authentication.OAuth.OAuth2 := OAuth2;
Le serveur prend en charge les types d'autorisation suivants :
- auth2Code : Il est utilisé pour effectuer l'authentification et l'autorisation dans la majorité des types d'applications, y compris les applications à page unique, les applications web et les applications installées nativement. Le flux permet aux applications d'acquérir de manière sécurisée des access_tokens pouvant être utilisés pour accéder à des ressources sécurisées, ainsi que des tokens de rafraîchissement pour obtenir des access_tokens supplémentaires, et des ID tokens pour l'utilisateur connecté.
- auth2ClientCredentials : Ce type d'octroi est couramment utilisé pour les interactions serveur à serveur qui doivent s'exécuter en arrière-plan, sans interaction immédiate avec un utilisateur. Ces types d'applications sont souvent appelés démons ou comptes de service.
- password (Identifiants du propriétaire de ressource) : Permet à une application de connecter l'utilisateur en gérant directement ses identifiants. Le client envoie le nom d'utilisateur et le mot de passe de l'utilisateur au point de terminaison de jeton.
- urn:ietf:params:oauth:grant-type:device_code (Code d'appareil) : Octroi d'autorisation d'appareil conformément à RFC 8628. Permet aux appareils à entrée limitée (téléviseurs intelligents, appareils IoT) d'obtenir l'autorisation de l'utilisateur en lui faisant autoriser sur un appareil secondaire.
Le type d'autorisation peut être personnalisé lors de l'enregistrement de l'application ; par défaut, tous les types d'autorisation sont pris en charge.
Points de terminaison
Par défaut, le composant est configuré avec les points de terminaison suivants pour gérer la demande d'autorisation et de jeton
Autorisation : /sgc/oauth2/auth
Token : /sgc/oauth2/token
Révocation : /sgc/oauth2/revoke
Introspection : /sgc/oauth2/introspect
Autorisation d'appareil : /sgc/oauth2/device
Vérification de l'appareil : /sgc/oauth2/device/verify
Donc si le serveur écoute sur le port 443 et que le domaine est www.esegece.com, les points d'accès seront :
Autorisation : https://www.esegece.com/sgc/oauth2/auth
Token : https://www.esegece.com/sgc/oauth2/token
Révocation : https://www.esegece.com/sgc/oauth2/revoke
Introspection : https://www.esegece.com/sgc/oauth2/introspect
Device Authorization: https://www.esegece.com/sgc/oauth2/device
Vérification de l'appareil : https://www.esegece.com/sgc/oauth2/device/verify
Les points de terminaison peuvent être configurés dans la propriété OAuth2Options.
Par défaut, PKCE (une extension du flux de code d'autorisation pour prévenir les attaques CSRF et d'injection de code d'autorisation) est activé.
Configuration
Avant de pouvoir démarrer le processus OAuth2, vous devez enregistrer les applications qui seront disponibles. Cela se fait à l'aide de la propriété Apps du composant serveur OAuth2.
Enregistrer l'application
Utilisez Apps.AddApp pour ajouter une nouvelle application au serveur OAuth2 ; vous devez définir les paramètres suivants :
- Nom de l'application :
c'est le nom de l'application. Exemple : MyApp
- RedirectURI :
est l'endroit vers lequel les réponses seront redirigées. Exemple : http://127.0.0.1:8080
- ClientId :
est une information publique et est l'identifiant du client.
- ClientSecret:
doit rester confidentiel.
Vous pouvez optionnellement définir les paramètres suivants :
- ExpiresIn :
par défaut est de 3600 secondes, le jeton expirera donc dans 1 heure ;
vous pouvez définir une valeur plus grande si nécessaire.
- RefreshToken :
par défaut les refresh tokens sont pris en charge ; si ce n'est pas le cas, définissez ce paramètre
sur false.
- AllowedGrantTypes : par défaut, tous les types de subvention sont pris en charge (auth2Code et auth2ClientCredentials), mais le serveur peut être configuré pour n'autoriser que l'autorisation par code ou uniquement les informations d'identification client.
Supprimer l'application
Utilisez Apps.RemoveApp pour supprimer une application existante.
AddToken
Si le serveur a été redémarré alors que des jetons avaient été émis, vous pouvez récupérer ces jetons en utilisant la méthode AddToken avant de démarrer le serveur OAuth2 et après l'enregistrement des applications
- AppName : le nom de l'application.
- Jeton : jeton d'accès.
- Expires : date d'expiration du jeton.
- RefreshToken : jeton d'actualisation.
RemoveToken
Supprime un token déjà émis.
OAuth2Options
La propriété OAuth2Options permet de configurer les points de terminaison du serveur et les fonctionnalités optionnelles.
Révocation
Révocation de jeton conformément à la RFC 7009. Lorsqu'elle est activée, les clients peuvent révoquer les jetons d'accès ou de rafraîchissement précédemment émis.
- OAuth2Options.Revocation.Enabled : définissez à True pour activer le point de terminaison de révocation.
- OAuth2Options.Revocation.URL : le chemin URL du point de terminaison. Valeur par défaut : /sgc/oauth2/revoke
Introspection
Introspection de token selon la RFC 7662. Lorsqu'elle est activée, les serveurs de ressources peuvent interroger le serveur d'autorisation pour déterminer l'état actif et les métadonnées d'un token.
- OAuth2Options.Introspection.Enabled : définir sur True pour activer le point de terminaison d'introspection.
- OAuth2Options.Introspection.URL : le chemin de l'URL du point de terminaison. Valeur par défaut : /sgc/oauth2/introspect
DeviceAuthorization
Octroi d'autorisation d'appareil selon RFC 8628. Lorsqu'il est activé, les appareils à contraintes d'entrée peuvent demander une autorisation en faisant autoriser l'utilisateur sur un appareil secondaire.
- OAuth2Options.DeviceAuthorization.Enabled : définissez à True pour activer le point de terminaison d'autorisation d'appareil.
- OAuth2Options.DeviceAuthorization.URL : le chemin d'URL du point de terminaison pour les demandes de code de périphérique. Par défaut : /sgc/oauth2/device
- OAuth2Options.DeviceAuthorization.VerificationURL : le chemin d'URL du point de terminaison pour la page de vérification utilisateur. Par défaut : /sgc/oauth2/device/verify
- OAuth2Options.DeviceAuthorization.ExpiresIn: la durée de vie en secondes du code de l'appareil. Par défaut : 600 (10 minutes).
- OAuth2Options.DeviceAuthorization.Interval : l'intervalle de sondage minimal en secondes que le client doit utiliser lors du sondage du point de terminaison de token. Par défaut : 5.