Einzelseiten-Apps
Mit IBM Cloud® App ID können Sie Ihren Einzelseitenanwendungen (single-page applications, SPA) umgehend eine Autorisierung und Authentifizierung hinzufügen. Eine SPA wird vollständig in Ihrem Browser ausgeführt, sie hat kein Back-End, das verwaltet werden müsste, und erfordert kein erneutes Laden der Seite, während die Anwendung verwendet wird. Einige allgemeine Frameworks, die mit SPAs verwendet werden, sind Angular und React.
Hat Ihre App ein Back-End, das Sie steuern? Dann ist eine SPA nicht der richtige Ablauf für Sie. Versuchen Sie es mit dem Ablauf für Web-Apps!
Informationen zum Ablauf
Obwohl dies der derzeitige Industriestandard für SPAs ist, empfiehlt die Arbeitsgruppe OAuth die Verwendung des impliziten Flusses aufgrund verschiedener Sicherheitsbedenken nicht mehr. Auf der Grundlage dieser Empfehlung wird App ID so konfiguriert, dass der Autorisierungscodefluss mit PKCE verwendet wird.
- Ein Benutzer versucht, sich bei Ihrer Einzelseitenanwendung anzumelden.
- Das App ID-SDK erstellt eine Code-Prüffunktion für die Autorisierungsanforderung, eine einfache Textversion der Codeabfrage. Zusammen mit der Autorisierungsanforderung sendet der Client die Codeabfrage sowie die Abfragemethode, mit der die Abfrage codiert ist.
- Der Authentifizierungsablauf wird von App ID in einem neuen Fenster gestartet.
- Der Benutzer wählt einen Identitätsprovider für die Authentifizierung aus und führt den Anmeldeprozess durch.
- Das App ID-SDK für die Anwendung empfängt den Bewilligungscode.
- Anschließend macht das SDK eine XHR-Anforderung an den App ID-Tokenendpunkt, zusammen mit dem Bewilligungscode und der Code-Prüffunktion, um Zugriffs- und Identitätstoken abzurufen.
Verwenden Sie SSO für Cloud Directory? Mit dem App ID -Client-SDK können Sie automatisch ein neues Tokenpaar anfordern, ohne dass sich der Benutzer explizit anmelden muss. Weitere Informationen finden Sie unter Anmeldung im Hintergrund.
Warum 'Autorisierungscode + PKCE'?
Aufgrund ihrer Natur sind Einzelseiten-Anwendungen nicht in der Lage, geheime Schlüssel sicher zu speichern. Der Ablauf 'Autorisierung + PKCE', eine Variante des Ablaufs für den Autorisierungscode mit OAuth 2.0, verwendet eine einmalige Code-Prüffunktion und eine Abfrage anstelle eines geheimen Schlüssels, um das Problem zu behandeln. Die Prüffunktion und die Abfrage stellen sicher, dass die Entität, die die Berechtigungs- und Tokenendpunkte aufruft, identisch ist. Dieser Prozess bedeutet, dass ein Angreifer keine Token vom Berechtigungsserver anfordern kann, ohne auch die Code-Prüffunktion zu kennen.
Obwohl der implizite Ablauf der aktuelle Industriestandard ist, können mehrere Sicherheitslücken gefunden werden. Zum Beispiel verwendet der Ablauf 'Implizit' Umleitungs-URIs für den Tokenabruf, was der Ablauf 'Autorisierung + PKCE' vermeidet, indem er stattdessen eine XHR-Anforderung verwendet. Aufgrund folgender Sicherheitslücken wird der Ablauf 'Implizit' nicht mehr empfohlen oder als sicher eingestuft:
-
Der Workflow für implizite Erteilung gibt Tokens als Teil der URL als Abfrageparameter oder im Hashfragment zurück. Auf diese Weise können die Token abgefangen und es kann auf sie zugegriffen werden. Die Token könnten im Browserverlauf oder in den Protokollen eines Benutzers gespeichert werden. Der Verlauf oder die Protokolle könnten in einem Cloud-Service gespeichert und an mehrere Geräte gesendet werden, wodurch sich das Risiko ebenfalls erhöht.
-
Der Implicit Flow ist anfällig für einen Redirect-URI-Angriff, d. h. ein Angreifer könnte einen genehmigten Redirect-URI durch ein Ziel seiner Wahl ersetzen. Bei einem Angriff mittels Umleitungs-URI folgen die Benutzer für die Autorisierung ihres Clients dem geänderten Link. Nach der Autorisierung werden sie an den URI des Angreifers umgeleitet, was dem Angreifer Zugriff auf die berechtigten Token des Benutzers ermöglicht.
Die vorangegangenen Beispiele sind nur einige der zentralen Probleme. Weitere Informationen finden Sie unter OAuth 2.0 sicherheitstechnische Best Practice.
Vorbereitende Schritte
Stellen Sie vor Beginn sicher, dass die folgenden Voraussetzungen erfüllt sind.
- Eine Instanz des App ID-Service.
- Ihre Umleitungs-URIs sind im App ID-Service-Dashboard festgelegt.
- Eine Einzelseiten-Anwendung. Wenn Sie über keine verfügen und den Ablauf ausprobieren möchten, versuchen Sie es mit dem Herunterladen der Beispielanwendung von der Übersichtsseite des App ID-Dashboards.
Anwendungsberechtigungsnachweise mit der GUI erstellen
Ihre Berechtigungsnachweise werden für die Verbindung Ihrer Anwendung mit App ID verwendet. Für die Erstellung Ihrer Berechtigungsnachweise registrieren Sie Ihre App bei App ID.
In Ihren SPA-Berechtigungsnachweisen wird kein geheimer Clientschlüssel zurückgegeben. Ein geheimer Schlüssel im Arbeitsablauf für Autorisierung + PKCE ist nicht erforderlich. In Ihrem SPA-Ablauf können Sie keine regulären Web-App-Berechtigungsnachweise verwenden.
- Melden Sie sich beim IBM Cloud-Dashboard in der Region an, in der Sie arbeiten möchten.
- Navigieren Sie zur Registerkarte Anwendungen und klicken Sie auf Anwendung hinzufügen.
- Geben Sie Ihrer Anwendung einen Namen.
- Wählen Sie in der Dropdown-Liste Typ die Option Einzelseiten-Anwendung aus.
- Klicken Sie auf Speichern.
- Klicken Sie in der Tabelle auf Berechtigungsnachweise anzeigen, um die Informationen zu sehen, die für die folgende Konfiguration erforderlich sind.
Anwendungsberechtigungsnachweise mit der API erstellen
Ihre Berechtigungsnachweise werden für die Verbindung Ihrer Anwendung mit App ID verwendet. Für die Erstellung Ihrer Berechtigungsnachweise registrieren Sie Ihre App bei App ID.
In Ihren SPA-Berechtigungsnachweisen wird kein geheimer Clientschlüssel zurückgegeben. Ein geheimer Schlüssel im Arbeitsablauf für Autorisierung + PKCE ist nicht erforderlich. In Ihrem SPA-Ablauf können Sie keine regulären Web-App-Berechtigungsnachweise verwenden.
-
Richten Sie die folgende Postanforderung an die /management/v4/
/Anwendungen -Endpunkt.curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/applications/ \ -H 'accept: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -H 'Content-Type: application/json' \ -d '{"name": "MySampleSPA", "type": "singlepageapp"}'Beispielantwort:
{ "clientId": "<clientID>", "tenantId": "<tenantID>", "name": "MySampleSPA", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/<tenantID>", "type": "singlepageapp" }
JavaScript-SDK konfigurieren
Um das SDK in Ihrer Anwendung zu installieren, führen Sie als Anleitung die folgenden Schritte aus.
-
Wechseln Sie mit der Eingabeaufforderung in das Verzeichnis, in dem Ihre Anwendung enthalten ist.
-
Installieren Sie den App ID-Service unter Verwendung von NPM oder indem Sie das CDN in der HTML-Hauptdatei verknüpfen.
-
Führen Sie für die Nutzung von NPM den folgenden Befehl aus.
npm install ibmcloud-appid-js -
Fügen Sie den folgenden Link zu Ihrer HTML-Hauptdatei hinzu, um das CDN hinzuzufügen.
<script src="https://cdn.appid.cloud.ibm.com/appid-0.3.0.min.js"></script>
-
-
Fügen Sie Ihre Client-ID und Ihren Erkennungsendpunkt zu Ihrer App hinzu, um das SDK zu initialisieren.
const appID = new AppID(); await appID.init({ clientId: '<spaClientID>', discoveryEndpoint: '<wellKnownEndpoint>' }); -
Fügen Sie in Ihrem Anwendungscode nach der Konfiguration Ihrer Anmeldeschaltfläche einen Aufruf an
signinhinzu. Daraufhin wird ein Popup-Fenster geöffnet, in dem der Benutzer aufgefordert wird, seine Berechtigungsnachweise einzugeben. Nach erfolgreicher Authentifizierung wird die Anzeige geschlossen und der Benutzer ist authentifiziert.const tokens = await appID.signin();
Konfiguration für eine Anmeldung im Hintergrund
Wenn SSO für Cloud Directory aktiviert ist, können Sie automatisch neue Token für einen Benutzer abrufen, ohne dass dieser sich unter Verwendung der Anmeldung im Hintergrund erneut authentifizieren muss. Um die Anmeldung im Hintergrund zu aktivieren, führen Sie als Anleitung die folgenden Schritte aus.
Aktualisierungstoken werden im SPA-Ablauf nicht zurückgegeben.
-
Navigieren Sie im App ID-Dashboard zu Cloud Directory > Single Sign-on.
-
Legen Sie für Single Sign-on aktivieren die Einstellung Aktiviert fest.
-
Klicken Sie auf Speichern.
-
Fügen Sie den folgenden Code zu Ihrer Anwendung hinzu. Achten Sie darauf, Ihre Anwendung so zu konfigurieren, dass die Anmeldeschaltfläche angezeigt wird, wenn die Anmeldung im Hintergrund fehlschlägt.
const tokens = await appID.silentSignin(); if (!tokens) { document.getElementById('login').addEventListener('click', async () => { const tokens = await appID.signin(); }); }