Authorization using External OAuth2 Providers

· Komponenten

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.

OAuth2 Azure AD Demo für Windows herunterladen