Die OAuth2-Provider-Server-Komponente ermöglicht es Ihnen, sich über einen externen OAuth2-Anbieter (wie Azure AD oder Google) zu authentifizieren, um auf die geschützten Ressourcen Ihres Servers zuzugreifen. Beispiel: Sie können Ihren HTTP-Server so konfigurieren, dass sich Benutzer mit Azure-Anmeldedaten anmelden können; wenn die Anmeldung erfolgreich ist, dürfen diese Benutzer auf die geschützten Ressourcen Ihres Servers zugreifen.
Der Authentifizierungsprozess erfolgt auf der Serverseite, und die OAuth2-Tokens werden nicht mit den Clients geteilt. Dies bedeutet, dass Azure, wenn sich der Benutzer zum Beispiel über Azure anmeldet und die Authentifizierung erfolgreich ist, ein Access-Token zurückgibt, das es Ihnen ermöglicht, Anfragen an den Azure-Server zu senden, um (je nach Scope) einige Informationen über das Benutzerprofil, E-Mails usw. zu erhalten. Dieses Access-Token WIRD NICHT GETEILT mit dem Client (zum Beispiel einem Webbrowser); anstatt das Access-Token an den Client zurückzugeben, erstellt der Server eine zufällige ID, die intern mit dem Access-Token verknüpft ist, sodass der Client (Webbrowser) jedes Mal, wenn er einen Aufruf an den OAuth2-Server durchführen möchte, die öffentliche ID verwendet, und der Server verwendet diese ID, um das OAuth2-Access-Token abzurufen, um die HTTP-Anfragen zu proxyen.
Nachfolgend finden Sie ein Beispiel dafür, wie die OAuth2-Authentifizierung funktioniert. Das Beispiel verwendet die Azure-AD-Konfiguration, die im folgenden Link beschrieben wird: OAuth2 Provider Azure AD.
Den Server starten
Der Server beginnt, auf localhost und Port 443 zu lauschen. Der sgcWebSockets-HTTP-Server ist mit der OAuth2-Server-Provider-Komponente verknüpft und die Eigenschaft Authentication ist aktiviert.
Bevor der Server gestartet wird, wird der Azure-OAuth2-Provider mit dem folgenden 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'
);
User Logins
Der Benutzer öffnet einen neuen Webbrowser und geht zum Endpunkt '/login'.
Der Server erkennt, dass der '/login'-Endpunkt zur Anmeldung über den Azure-Anbieter 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 Authentifizierungsendpunkt 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
Den OAuth2-Code validieren
Nun hat der Server einen Code von Azure empfangen und stellt eine interne Verbindung zu Azure her (von Server zu Server), um zu validieren, dass dieser Token korrekt ist (und um 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
Beim Übergeben einiger Parameter wie des empfangenen Codes und des clientsecret gibt Azure, wenn die Validierung erfolgreich ist, das Access Token zurück, das verwendet werden kann, um auf die geschützten Azure-Ressourcen zuzugreifen, wie das Lesen des Profils, der E-Mail...
Erfolgreiches Zugriffstoken
Wenn der Server ein erfolgreiches AccessToken empfängt, wird das Ereignis OnOAuth2ProviderTokenValid aufgerufen, sodass Sie hier konfigurieren können, wie das AccessToken gespeichert wird (falls überhaupt), indem Sie auf die Parameterklasse TsgcHTTPOAuth2ProviderToken zugreifen
AccesToken: ist das von Azure zurückgegebene OAuth2-Token
ID: ist der öffentliche Bezeichner, der als Cookie gespeichert wird.
In diesem Ereignis können Sie konfigurieren, was nach einer erfolgreichen Authentifizierung geschehen soll, Beispiel: Wenn Sie den Benutzer zur privaten URL umleiten möchten, verwenden Sie Folgendes
Response.Redirect.URL := 'https://localhost/private';
Anfragen an Azure senden
Nun können Sie Anfragen an den Azure-Server senden, indem Sie die als Cookie gespeicherte Public ID verwenden.
Beispiel: Wenn Sie die Profildaten lesen möchten, verwenden Sie die folgende Methode.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Dabei ist ID der öffentliche ID-Bezeichner.