Het OAuth2-providerservercomponent stelt u in staat te authenticeren met een externe OAuth2-provider (zoals Azure AD of Google) om toegang te krijgen tot de beveiligde resources van uw server. Voorbeeld: u kunt uw HTTP-server configureren om gebruikers in te laten loggen met Azure-referenties; als het inloggen succesvol is, krijgen die gebruikers toegang tot de beveiligde resources van uw server.
Het authenticatieproces wordt aan de serverzijde uitgevoerd en de OAuth2-tokens worden niet gedeeld met de clients. Dit betekent dat wanneer de gebruiker inlogt via Azure, als de authenticatie succesvol is, Azure een toegangstoken retourneert waarmee u verzoeken kunt sturen naar de Azure-server om informatie (afhankelijk van het bereik) over het gebruikersprofiel, e-mails, enz. op te halen. Dit toegangstoken WORDT NIET GEDEELD met de client (bijv. een webbrowser); in plaats van het toegangstoken terug te sturen naar de client, maakt de server een willekeurig ID aan dat intern is gekoppeld aan het toegangstoken, zodat elke keer dat de client (webbrowser) een aanroep wil doen naar de OAuth2-server, het openbare ID wordt gebruikt en de server dit ID gebruikt om het OAuth2-toegangstoken op te halen om de HTTP-verzoeken door te sturen.
Hieronder vindt u een voorbeeld van hoe de OAuth2-authenticatie werkt. Het voorbeeld maakt gebruik van de Azure AD-configuratie die wordt beschreven in de volgende koppeling: OAuth2 Provider Azure AD.
Start de server
De server begint te luisteren op localhost en poort 443. De sgcWebSockets HTTP-server is gekoppeld aan de OAuth2 Server Provider-component en de verificatie-eigenschap is ingeschakeld.
Voordat de server wordt gestart, wordt de Azure OAuth2-provider geregistreerd met de volgende methodeaanroep.
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'
);
Gebruikersaanmeldingen
De gebruiker opent een nieuw webbrowservenster en gaat naar het '/login'-eindpunt.
De server detecteert dat het eindpunt '/login' wordt gebruikt om in te loggen via de Azure-provider en leidt om naar
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
En de OAuth2-authenticatiestroom begint.
OAuth2-authenticatie
De gebruiker wordt doorgestuurd naar het OAuth2-server-authenticatie-eindpunt en moet nu inloggen met zijn inloggegevens en de voorwaarden van de OAuth2-toepassing accepteren.
Als de autorisatie succesvol is, stuurt Azure AD een code naar de url
https://localhost/callback
De OAuth2-code valideren
Nu heeft de server een code ontvangen van Azure en zal er een interne verbinding tot stand brengen met Azure (van server naar server) om te valideren of dit token correct is (en te voorkomen dat iemand de server probeert te hacken).
De server maakt verbinding met
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
Door bepaalde parameters te geven, zoals de ontvangen code en het clientgeheim, retourneert Azure bij succesvolle validatie het toegangstoken dat kan worden gebruikt voor toegang tot de Azure-beveiligde resources, zoals het lezen van het profiel, e-mail...
Succesvol toegangstoken
Wanneer de server een succesvol AccessToken ontvangt, wordt de gebeurtenis OnOAuth2ProviderTokenValid aangeroepen, zodat u hier kunt configureren hoe het AccessToken wordt opgeslagen (indien van toepassing) door toegang te krijgen tot de parameterklasse TsgcHTTPOAuth2ProviderToken
AccesToken: is het OAuth2-token geretourneerd door Azure
ID: is de openbare identifier die als cookie wordt opgeslagen.
In deze gebeurtenis kunt u configureren wat er moet worden gedaan na een succesvolle authenticatie, bijvoorbeeld: als u de gebruiker wilt doorverwijzen naar de privé-URL, gebruik dan het volgende
Response.Redirect.URL := 'https://localhost/private';
Verzoeken verzenden naar Azure
Nu kunt u verzoeken sturen naar de Azure-server met de openbare ID die als cookie is opgeslagen.
Voorbeeld: als u de profielgegevens wilt lezen, gebruikt u de volgende methode.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Waarbij ID de publieke ID-identifier is.