À partir de sgcWebSockets 2022.3.0, tu peux utiliser des fournisseurs OAuth2 externes pour authentifier les requêtes reçues par ton serveur.
Le composant OAuth2 Server Provider permet d'intégrer des fournisseurs OAuth2 externes (comme Azure AD, Google, Facebook...) dans ton composant serveur (par exemple un serveur HTTP), pour qu'un utilisateur puisse se connecter avec ses identifiants Azure AD et, si l'authentification réussit, le serveur HTTP puisse fournir un accès aux ressources protégées.
Flux du OAuth2 Server Provider
Le composant OAuth2 Provider Server permet de s'authentifier via un fournisseur OAuth2 externe (comme Azure AD, Google...) pour accéder aux ressources protégées de ton serveur. Exemple : tu peux configurer ton serveur HTTP et autoriser tes utilisateurs à se connecter avec leurs identifiants Azure ; si la connexion réussit, tu leur donnes accès aux ressources protégées de ton serveur.
Le processus d'authentification se fait côté serveur et les jetons OAuth2 ne sont pas partagés avec les clients ; cela signifie que lorsque l'utilisateur se connecte avec Azure par exemple, si l'authentification réussit, Azure renvoie un Access Token qui permet d'envoyer des requêtes au serveur Azure pour récupérer des informations (selon le scope) sur le profil utilisateur, les emails... Cet Access Token N'EST PAS PARTAGÉ avec le client (par ex. un navigateur web) ; au lieu de retourner l'Access token au client, le serveur crée un ID aléatoire qui est lié en interne à l'Access Token, donc à chaque fois que le client (navigateur web) veut faire un appel au serveur OAuth2, il utilise l'ID public et le serveur utilise cet ID pour récupérer l'Access Token OAuth2 et proxifier les requêtes HTTP.
Tu trouveras ci-dessous un exemple de fonctionnement de l'authentification OAuth2. L'exemple utilisera la configuration Azure AD décrite dans le lien suivant OAuth2 Provider Azure AD.
Démarrer le serveur
Le serveur démarre en écoutant sur localhost et le port 443. Le serveur HTTP sgcWebSockets est lié au composant OAuth2 Server Provider et la propriété Authentication est activée.
Avant le démarrage du serveur, le fournisseur OAuth2 Azure est enregistré via l'appel de méthode suivant.
RegisterProvider(
'azure',
'90945b8d-f6b7-4b97-b2bd-21c3c90b5f3x',
'PN67Q~5m06c-~X_GMyMf9zMntmm5l2dt~3jVq',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token',
'user.read',
'/login',
'https://localhost/callback'
);
Connexion utilisateur
L'utilisateur ouvre un nouveau navigateur web et va sur l'endpoint '/login'.
Le serveur détecte que l'endpoint '/login' sert à se connecter via le fournisseur Azure, donc il redirige vers
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
Et le flux d'authentification OAuth2 démarre.
Authentification OAuth2
L'utilisateur est redirigé vers l'endpoint d'authentification du serveur OAuth2 ; il doit maintenant se connecter avec ses identifiants et accepter les conditions de l'application OAuth2.
Si l'autorisation réussit, Azure AD envoie un Code à l'URL
https://localhost/callback
Valider le code OAuth2
Le serveur a maintenant reçu un code d'Azure et va effectuer une connexion interne à Azure (de serveur à serveur) pour valider que ce jeton est correct (et éviter que quelqu'un tente de pirater le serveur).
Le serveur se connecte à
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
En passant des paramètres comme le code reçu et le clientsecret, si la validation réussit, Azure renvoie l'Access Token qui peut être utilisé pour accéder aux ressources protégées Azure comme lire le profil, l'email...
Access Token réussi
Quand le serveur reçoit un AccessToken valide, l'événement OnOAuth2ProviderTokenValid est appelé ; ici tu peux configurer comment l'AccessToken est stocké (s'il l'est) en accédant à la classe paramètre TsgcHTTPOAuth2ProviderToken
AccesToken : jeton OAuth2 renvoyé par Azure.
ID : identifiant public stocké en cookie.
Dans cet événement, tu peux configurer ce qui se passe après une authentification réussie ; exemple : si tu veux rediriger l'utilisateur vers l'URL privée, utilise ce qui suit
Response.Redirect.URL := 'https://localhost/private';
Envoyer des requêtes à Azure
Tu peux maintenant envoyer des requêtes au serveur Azure en utilisant l'ID public stocké en cookie.
Exemple : si tu veux lire les données du profil, utilise la méthode suivante.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Où ID est l'identifiant public.
