Le composant serveur fournisseur OAuth2 vous permet de vous authentifier en utilisant un fournisseur OAuth2 externe (comme Azure AD ou Google) pour accéder aux ressources protégées de votre serveur. Exemple : vous pouvez configurer votre serveur HTTP pour permettre aux utilisateurs de se connecter avec des identifiants Azure ; si la connexion réussit, ces utilisateurs seront autorisés à accéder aux ressources protégées de votre serveur.
Le processus d'authentification est effectué côté serveur et les jetons OAuth2 ne sont pas partagés avec les clients, ce qui signifie que lorsque l'utilisateur se connecte en utilisant Azure par exemple, si l'authentification réussit, Azure retourne un jeton d'accès qui vous permet d'envoyer des requêtes au serveur Azure pour obtenir des informations (selon la portée) sur le profil utilisateur, les e-mails... Ce jeton d'accès N'EST PAS PARTAGÉ avec le client (par exemple un navigateur web) ; au lieu de retourner le jeton d'accès au client, le serveur crée un identifiant aléatoire lié en interne au jeton d'accès, de sorte que chaque fois que le client (navigateur web) veut appeler le serveur OAuth2, il utilise l'identifiant public et le serveur utilise cet identifiant pour obtenir le jeton d'accès OAuth2 afin de proxifier les requêtes HTTP.
Voici 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 commence à écouter sur localhost et le port 443. Le serveur HTTP sgcWebSockets est lié au composant fournisseur OAuth2 Server et la propriété Authentication est activée.
Avant le démarrage du serveur, le fournisseur Azure OAuth2 est enregistré à l'aide de 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'
);
Connexions utilisateur
L'utilisateur ouvre un nouveau navigateur web et accède au point de terminaison '/login'.
Le serveur détecte que le point de terminaison '/login' est utilisé pour se connecter via le fournisseur Azure et redirige donc vers
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
Et le flux d'authentification OAuth2 commence.
Authentification OAuth2
L'utilisateur est redirigé vers le point de terminaison d'authentification du serveur OAuth2, il doit maintenant se connecter en utilisant les informations d'identification et accepter les termes de l'application OAuth2.
Si l'autorisation est réussie, Azure AD envoie un Code à l'url
https://localhost/callback
Valider le code OAuth2
Maintenant, le serveur a reçu un code d'Azure et effectuera une connexion interne vers Azure (de serveur à serveur) pour valider que ce jeton est correct (et éviter qu'une personne tente de pirater le serveur).
Le serveur se connecte à
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
En passant certains paramètres comme le code reçu et le secret client, si la validation est réussie, Azure retourne le jeton d'accès qui peut être utilisé pour accéder aux ressources protégées Azure comme lire le profil, l'e-mail...
Jeton d'accès réussi
Lorsque le serveur reçoit un AccessToken valide, l'événement OnOAuth2ProviderTokenValid est appelé. Vous pouvez y configurer le mode de stockage de l'AccessToken (le cas échéant) en accédant à la classe de paramètre TsgcHTTPOAuth2ProviderToken.
AccesToken : est le jeton OAuth2 retourné par Azure
ID: est l'identifiant public stocké sous forme de cookie.
Dans cet événement, vous pouvez configurer ce qu'il faut faire après une authentification réussie, par exemple : si vous voulez rediriger l'utilisateur vers l'URL privée, utilisez ce qui suit
Response.Redirect.URL := 'https://localhost/private';
Envoyer des requêtes à Azure
Maintenant, vous pouvez envoyer des requêtes au serveur Azure en utilisant l'ID public stocké comme cookie.
Exemple : si vous souhaitez lire les données de profil, utilisez la méthode suivante.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Où ID est l'identifiant public.