Vanaf sgcWebSockets 2022.3.0 kun je externe OAuth2-providers gebruiken om de requests te authenticeren die je server ontvangt.
Met de OAuth2 Server Provider-component kun je externe OAuth2-providers (zoals Azure AD, Google, Facebook...) integreren in je servercomponent (zoals een HTTP-server), zodat een gebruiker kan inloggen met Azure AD-credentials en, als de authenticatie slaagt, de HTTP-server toegang kan verlenen tot beschermde bronnen.
OAuth2 Server Provider-flow
Met de OAuth2 Provider Server-component kun je authenticeren via een externe OAuth2-provider (zoals Azure AD, Google...) om toegang te krijgen tot de beschermde bronnen van je server. Voorbeeld: je kunt je HTTP-server configureren en je gebruikers laten inloggen met de Azure-credentials. Als de login slaagt, geef je deze gebruikers toegang tot de beschermde bronnen van je server.
Het authenticatieproces wordt aan de serverzijde uitgevoerd en de OAuth2-tokens worden niet met de clients gedeeld. Dit betekent dat wanneer de gebruiker bijvoorbeeld inlogt via Azure, en de authenticatie slaagt, Azure een Access Token teruggeeft waarmee je requests naar de Azure-server kunt sturen om informatie op te halen (afhankelijk van de scope) over het gebruikersprofiel, e-mails... Dit Access Token wordt NIET GEDEELD met de client (bijvoorbeeld een webbrowser). In plaats van het Access Token aan de client terug te geven, maakt de server een willekeurige ID aan die intern aan het Access Token is gekoppeld. Elke keer dat de client (webbrowser) een aanroep wil doen naar de OAuth2-server, gebruikt deze de publieke ID en gebruikt de server deze ID om het OAuth2 Access Token op te halen om de HTTP-requests te proxyen.
Hieronder vind je een voorbeeld van hoe de OAuth2-authenticatie werkt. Het voorbeeld gebruikt de Azure AD-configuratie beschreven in de volgende link 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 Authenticatie-eigenschap is ingeschakeld.
Voordat de server wordt gestart, wordt de Azure OAuth2-provider geregistreerd via de volgende method-aanroep.
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'
);
Gebruiker logt in
De gebruiker opent een nieuwe webbrowser en gaat naar het '/login'-endpoint.
De server detecteert dat het '/login'-endpoint wordt gebruikt om in te loggen via de Azure-provider en stuurt door naar
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
En de OAuth2-authenticatieflow start.
OAuth2-authenticatie
De gebruiker wordt doorgestuurd naar het OAuth2 Server Authenticatie-endpoint en moet nu inloggen met de credentials en de voorwaarden van de OAuth2-applicatie accepteren.
Als de autorisatie slaagt, 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 een interne verbinding met Azure opzetten (van server naar server) om te valideren dat dit token correct is (en te voorkomen dat iemand probeert de server te hacken).
De server verbindt met
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
en geeft enkele parameters mee zoals de ontvangen code en het clientsecret. Als de validatie slaagt, geeft Azure het Access Token terug dat kan worden gebruikt om toegang te krijgen tot de beschermde Azure-bronnen, zoals het profiel of e-mail lezen...
Succesvol Access Token
Wanneer de server een succesvol Access Token ontvangt, wordt de gebeurtenis OnOAuth2ProviderTokenValid aangeroepen. Hier kun je configureren hoe het Access Token wordt opgeslagen (indien gewenst) via de parameterklasse TsgcHTTPOAuth2ProviderToken
AccesToken: dit is het OAuth2-token dat Azure heeft teruggegeven
ID: dit is de publieke identifier die als cookie wordt opgeslagen.
In deze gebeurtenis kun je configureren wat er moet gebeuren na een succesvolle authenticatie. Voorbeeld: als je de gebruiker wilt doorsturen naar de private-url, gebruik je het volgende
Response.Redirect.URL := 'https://localhost/private';
Requests naar Azure versturen
Nu kun je requests naar de Azure-server versturen met behulp van de publieke ID die als cookie is opgeslagen.
Voorbeeld: als je de profielgegevens wilt lezen, gebruik je de volgende methode.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Waarbij ID de publieke ID-identifier is.
