Ab sgcWebSockets 2022.3.0 kannst du externe OAuth2-Anbieter verwenden, um die von deinem Server empfangenen Anfragen zu authentifizieren.
Die Komponente OAuth2 Server Provider ermöglicht es, externe OAuth2-Anbieter (wie Azure AD, Google, Facebook...) in deine Server-Komponente (wie einen HTTP-Server) zu integrieren, sodass ein Benutzer sich mit den Azure AD-Anmeldedaten anmelden kann und der HTTP-Server bei erfolgreicher Authentifizierung Zugriff auf geschützte Ressourcen gewähren kann.
OAuth2 Server Provider-Ablauf
Die OAuth2 Provider Server-Komponente ermöglicht die Authentifizierung über einen externen OAuth2-Anbieter (wie Azure AD, Google...), um auf die geschützten Ressourcen deines Servers zuzugreifen. Beispiel: du kannst deinen HTTP-Server so konfigurieren, dass sich Benutzer mit Azure-Anmeldedaten anmelden können. Bei erfolgreicher Anmeldung gewährst du diesen Benutzern Zugriff auf die geschützten Ressourcen deines Servers.
Der Authentifizierungsprozess wird serverseitig abgewickelt und die OAuth2-Tokens werden nicht mit den Clients geteilt. Das bedeutet, dass beim Login eines Benutzers über Azure, bei erfolgreicher Authentifizierung, Azure ein Access Token zurückgibt, mit dem Anfragen an den Azure-Server gesendet werden können, um (je nach Scope) Informationen über das Benutzerprofil, E-Mails... abzurufen. Dieses Access Token WIRD NICHT mit dem Client (z. B. einem Webbrowser) geteilt. Anstatt das Access Token an den Client zurückzugeben, erzeugt der Server eine zufällige ID, die intern mit dem Access Token verknüpft ist. Jedes Mal, wenn der Client (Webbrowser) einen Aufruf an den OAuth2-Server senden will, verwendet er die öffentliche ID, und der Server nutzt diese ID, um das OAuth2 Access Token abzurufen und die HTTP-Anfragen weiterzuleiten.
Unten findest du ein Beispiel, wie die OAuth2-Authentifizierung funktioniert. Das Beispiel verwendet die Azure AD-Konfiguration, die unter folgendem Link beschrieben ist: OAuth2 Provider Azure AD.
Server starten
Der Server lauscht auf localhost und Port 443. Der sgcWebSockets HTTP-Server ist mit der OAuth2 Server Provider-Komponente verknüpft und die Authentication-Eigenschaft ist aktiviert.
Vor dem Start des Servers wird der Azure OAuth2-Provider mit folgendem Methodenaufruf registriert.
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'
);
Benutzer-Login
Der Benutzer öffnet einen neuen Webbrowser und ruft den Endpunkt '/login' auf.
Der Server erkennt, dass der Endpunkt '/login' für die Anmeldung über den Azure-Provider verwendet wird, und leitet weiter zu
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
Und der OAuth2-Authentifizierungsablauf beginnt.
OAuth2-Authentifizierung
Der Benutzer wird zum Authentifizierungs-Endpunkt des OAuth2-Servers umgeleitet. Nun muss er sich mit den Anmeldedaten anmelden und die Bedingungen der OAuth2-Anwendung akzeptieren.
Wenn die Autorisierung erfolgreich ist, sendet Azure AD einen Code an die URL
https://localhost/callback
OAuth2-Code validieren
Nun hat der Server einen Code von Azure erhalten und stellt eine interne Verbindung zu Azure her (Server zu Server), um zu validieren, dass dieses Token korrekt ist (und zu verhindern, dass jemand versucht, den Server zu hacken).
Der Server verbindet sich mit
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
Dabei werden einige Parameter wie der empfangene Code und das ClientSecret übergeben. Bei erfolgreicher Validierung gibt Azure das Access Token zurück, mit dem auf die geschützten Azure-Ressourcen zugegriffen werden kann, z. B. um das Profil oder die E-Mail zu lesen...
Erfolgreiches Access Token
Wenn der Server ein erfolgreiches AccessToken erhält, wird das Ereignis OnOAuth2ProviderTokenValid aufgerufen. Hier kannst du konfigurieren, wie das AccessToken gespeichert wird (sofern überhaupt), indem du auf die Parameterklasse TsgcHTTPOAuth2ProviderToken zugreifst
AccesToken: ist das von Azure zurückgegebene OAuth2-Token
ID: ist die öffentliche Kennung, die als Cookie gespeichert wird.
In diesem Ereignis kannst du festlegen, was nach einer erfolgreichen Authentifizierung passieren soll. Beispiel: wenn du den Benutzer auf die private URL umleiten willst, verwende Folgendes
Response.Redirect.URL := 'https://localhost/private';
Anfragen an Azure senden
Nun kannst du Anfragen an den Azure-Server senden, indem du die als Cookie gespeicherte öffentliche ID verwendest.
Beispiel: wenn du die Profildaten lesen willst, verwende folgende Methode.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Wobei ID die öffentliche ID-Kennung ist.
