Integration der immersiven Authentifizierung

Documentation

Eine Anwendung kann verwenden RestFrontage-Anmeldebildschirme um seine Nutzer zu authentifizieren, MFA anzuwenden und ein Token abzurufen, das mit WebAPI und OData verwendet werden kann. Es muss keine Passwort-, QR-Code- oder TOTP-Eingabebildschirme reproduzieren.

Dieser Leitfaden bietet zwei umfassende Projekte: ein WPF Windows-Anwendung und ein JavaScript-basierte Webanwendung, gehostet von einem kleinen Projekt ASP.NET Core. Keiner von beiden bezieht sich auf GraphicStream.Immersive.Server.Interop oder irgendeine andere immersive DLL. Das zukünftige unabhängige Authentifizierungspaket ist nicht erforderlich, um sie zu verwenden.

Die Illustrationen sind Screenshots der Beispiele und des RestFrontage-Logins in einer isolierten Testumgebung. Die gezeigten Konten sind Demokonten. Die Ports und IDs der Aufnahmen stammen vom Teststand; verwenden Sie die Werte aus Ihrer eigenen Konfiguration.

In diesem Artikel

    Mehr anzeigen
    Weniger anzeigen

    1. Verständnis des Prinzips

    1.1 Eine gemeinsame Verbindungsschnittstelle

    Der Nutzer klickt Einloggen in Ihrer Anwendung. Der Browser zeigt den immersivem Login an. Er gibt seinen Benutzernamen und sein Passwort ein, dann seinen MFA-Code, wenn es die Serverrichtlinie verlangt. Wenn die Verifizierung konfiguriert werden muss, präsentiert der Server ihm den QR-Code und bittet ihn, den ersten Code zu bestätigen.

    Die Anwendung erhält dann automatisch ein Token. Dieses Token ermöglicht es, die APIs aufzurufen mit den Rechten des eingeloggten Benutzers. Eine erfolgreiche Verbindung gewährt ihnen keine zusätzlichen Rechte.

    MFA folgt der bereits in Immersive festgelegten Einstellung: deaktiviert, mit Ausnahmen erforderlich oder für alle betroffenen Nutzer erforderlich. Die Client-Anwendung entscheidet sich nicht, diese Richtlinie zu umgehen.

    RestFrontage-gehostete Anmeldung: Der Name der Anwendung wird mit der Eingabe der Zugangsdaten begleitet

    1.2 Zwei Codes, die unterschiedliche Aufgaben erfüllen

    Die TOTP-Code ist der sechsstellige Code, der von der App des Telefons angezeigt wird. Er wird verwendet, um die Identität nach dem Passwort zu bestätigen. Er ändert sich in der Regel alle 30 Sekunden und wird ohne Internet berechnet.

    Die Rückgabecode ist ein technischer Code, der vom Server nach der Anmeldung generiert wird. Er wird automatisch an die Anwendung übertragen, die ihn gegen das Token austauscht. Der Benutzer muss ihn niemals kopieren, behalten oder an einen Administrator weiterleiten. Dieser Code verfällt danach 60 Sekunden und funktioniert nur einmal.

    TOTP-Check-Anmelden des Servers, bevor sie zur Anwendung zurückkehren

    1.3 Die gesamte Reise

    sequenceDiagram
        participant A as Votre application
        participant N as Navigateur
        participant R as RestFrontage
        A->>A: Préparer state et une preuve PKCE
        A->>N: Ouvrir Browser/Authorize
        N->>R: Demander la connexion pour l'application déclarée
        R-->>N: Afficher le login Immersive
        N->>R: Saisir identifiant et mot de passe
        opt MFA requise
            R-->>N: QR code si inscription nécessaire, puis saisie TOTP
            N->>R: Confirmer un code à six chiffres
        end
        R-->>N: Rediriger vers le callback avec un code temporaire
        N-->>A: Transmettre code, state et iss
        A->>A: Vérifier le retour attendu
        A->>R: Browser/Token avec le code et la preuve PKCE
        R-->>A: Token Immersive et durée restante
        A->>R: WebAPI ou OData avec Authorization: Bearer
        R-->>A: Réponse autorisée selon les droits du compte
    

    Schutz PKCE S256 verbindet den Codeaustausch mit der Anwendung, die die Verbindung gestartet hat. Die Anwendung pflegt einen privaten Zufallswert, den code_verifier, und übertrug zunächst nur seinen Fingerabdruck, die code_challenge. Das Abfangen des Rückgabecodes allein reicht daher nicht aus, um das Token zu erhalten. Dieser Mechanismus wird beschrieben durch RFC 7636.

    state Verknüpft die Rückgabe mit der aktuellen Verbindungsanfrage. iss Identifiziert den Server, der antwortet. Die bereitgestellten Clients überprüfen diese Werte und die Rücksendungsadresse vor dem Austausch.

    2. Bereiten Sie die beiden Beispiele vor.

    2.1 Inhalt der bereitgestellten Datei

    Offen Samples/Immersive.Authentication.Samples.slnx in Visual Studio. Die Lösung enthält genau zwei unabhängige Projekte.

    Projekt Funktion Nebengebäude
    Immersive.Authentication.Wpf Windows-ausführbare Datei; bietet den externen Browser oder ein integriertes WebView2-Fenster an und ruft dann eine API auf. .NET 10 für Windows, WPF und das Microsoft.Web.WebView2-Paket. Keine immersiven DLLs.
    Immersive.Authentication.Web JavaScript-Anwendung; leitet den Tab auf Immersive um und löst den Code beim Return ein. .NET 10/ASP.NET Core zur Bereitstellung von Dateien. JavaScript kann auch von einem anderen Webserver gehostet werden.

    Das Dossier Executables/WPF, im Lieferarchiv, enthält die veröffentlichte ausführbare Datei und deren Konfiguration. Diese Freigabe erfordert die .NET Desktop Laufzeit 10 x64 und für den integrierten Modus gilt die Microsoft Edge WebView runtime2. Bewahren Sie alle veröffentlichten Dateien zusammen, einschließlich des WebView2-Uploaders.

    Um die Quellen zu kompilieren, verwenden Sie das .NET 10 SDK und in Visual Studio die Entwicklungskomponenten Desktop .NET und ASP.NET/Web. Beide Projekte können vom Server-Repository getrennt werden: Du kannst den Samples-Ordner auf einen anderen Computer kopieren.

    2.2 Apps in RestFrontage deklarieren

    Füge diesen Abschnitt zur RestFrontage-Instanzkonfiguration hinzu und ersetze die Adressen entsprechend deiner Umgebung. Die appsettings.example.json enthält dasselbe Beispiel. Es überschreibt nicht deine bestehende Konfiguration.

    {
      "BrowserAuthentication": {
        "Issuer": "https://localhost:44333",
        "Clients": [
          {
            "ClientId": "immersive-desktop",
            "DisplayName": "Exemple Immersive WPF",
            "RedirectUris": [ "http://127.0.0.1/callback/" ],
            "AllowLoopbackRedirect": true
          },
          {
            "ClientId": "immersive-web",
            "DisplayName": "Exemple Immersive Web",
            "RedirectUris": [ "https://localhost:5173/auth/callback" ]
          }
        ]
      }
    }
    
    

    Emittent ist der HTTPS-Ursprung von RestFrontage, wie der Browser darauf zugrifft: Schema, Host und optional Port, ohne Pfad oder letzte Leiste. Diese Reise wartet auf einen Server, der an der Wurzel dieses Ursprungs montiert ist. Wenn ein Reverse-Proxy verwendet wird, muss der Server das korrekte externe Schema empfangen und über seine vertrauenswürdige Konfiguration hosten.

    ClientId identifiziert die Anwendung und ist kein Geheimnis. DisplayName ist sein Name, der im Login angezeigt wird. Deklarieren Sie nur Anwendungen, die berechtigt sind, die Rechte ihrer Nutzer zu nutzen. Für diese Beispiele sollten keine gemeinsamen Geheimnisse in eine Binär- oder JavaScript-Datei eingebettet werden.

    RedirectUris Listet die genauen Rücksendadressen auf. Es werden keine Wildcards, Anfrageparameter oder Fragmente akzeptiert. Jede Webadresse verwendet HTTPS. AllowLoopback-Umleitung Erlaubt nur dem nativen Client, einen freien Port auf der deklarierten lokalen Schleifenadresse auszuwählen. Der literale Host und der Pfad bleiben kontrolliert. Im WPF-Beispiel wird die Rückgabe zum Beispiel http://127.0.0.1:54321/callback/.

    Um eine App zu pausieren, fügen Sie hinzu "Enabled": false zu seiner Deklaration. Ein abwesender oder deaktivierter Eintrag kann diesen Pfad nicht nutzen.

    2.3 Überprüfen Sie HTTPS und Netzwerkzugang

    RestFrontage muss per Erweiterung erreichbar sein und über ein anerkanntes Zertifikat verfügen. Das Webprojekt verwendet außerdem HTTPS. Für lokale Tests ASP.NET Core installieren Sie gegebenenfalls das vertrauenswürdige Entwicklungszertifikat mit:

    dotnet dev-certs https --trust
    
    

    Die bereitgestellten Anwendungen deaktivieren die Zertifikatsvalidierung nicht. Für ein internes Netzwerk verwenden Sie ein Zertifikat, das von den jeweiligen Geräten erkannt wird.

    Für das Webprojekt muss RestFrontage beispielsweise Aufrufe vom Ursprung der Anwendung erlauben https://localhost:5173, in seiner CORS-Richtlinie. Insbesondere muss die WebAPI-Anfrage in der Lage sein, das Authorization. Die CORS-Autorisierung überschreibt nicht die Rückruf-Deklaration. WPF-Aufrufe hängen nicht von CORS ab.

    Die Verbindung funktioniert ohne Internet, wenn die Erweiterung RestFrontage und jede Webanwendung im internen Netzwerk erreicht. Die Ressourcen in den Beispielen sind lokal. Das Telefon berechnet seinen TOTP-Code offline; seine Datums- und Uhrzeiteinstellungen müssen korrekt bleiben.

    3. Verwenden Sie die WPF-Probe

    3.1 Start und Verbindung

    Im Projekt Immersive.Authentication.Wpf, die appsettings.json Setzt die Anfangswerte:

    {
      "Server": "https://localhost:44333",
      "ClientId": "immersive-desktop",
      "BrowserMode": "External",
      "ApiPath": "/api/Security/Mfa/Context"
    }
    
    

    Aus dem Samples-Ordner führen Sie aus:

    dotnet run --project Immersive.Authentication.Wpf
    
    

    Du kannst auch laufen Immersive.Authentication.Wpf.exe aus dem veröffentlichten Ordner oder setze dieses Projekt als Start-up-Projekt in Visual Studio.

    WPF-Anwendung: Serverkonfiguration, In-Browser-Login und WebAPI-Aufruf
    1. Überprüfen Sie die RestFrontage-Adresse und die Anwendungs-ID.
    2. Wähle Externer Browser oder Integrierter Browser (WebView2), dann klicken Sie Einloggen.
    3. Vollständige Passworteingabe und, falls aufgefordert, MFA-Verifizierung.
    4. Im externen Modus kehren Sie zum WPF zurück. Im integrierten Modus schließt sich das Anmeldefenster automatisch.
    5. Klick Ruf GET an. Die vorgeschlagene Route gibt den Namen des verbundenen Kontos zurück.

    Nach einer erfolgreichen Verbindung zeigt das WPF das Fälligkeitsdatum des Tokens an. Der vorgeschlagene Aufruf wird zurückgegeben HTTP 200 und den Namen des verbundenen Kontos.

    WPF-Anwendung nach integrierter Anmeldung: Token empfangen und WebAPI-Aufruf erfolgreich

    In Extern, verwendet die Rückgabe ein temporäres Netzwerk-Hören, begrenzt auf 127.0.0.1, auf einem automatisch gewählten Port. Dieses Abhören beginnt, bevor der Browser geöffnet wird, und endet am Ende der Reise. Die maximale Verbindungszeit beträgt zehn Minuten. Die Stornieren Pausiert das Warten in der App. Der Browser-Tab wird nicht geschlossen.

    3.2 Wählen Sie den Browser

    Beide Optionen verwenden denselben Server, dieselbe ClientId und dieselben Rückgabe- und PKCE-Prüfungen. MFA wird weiterhin von Immersive durchgesetzt. Du musst keine zusätzliche Anwendung deklarieren, um zwischen ihnen zu wechseln.

    Mode Was der Nutzer sieht Rücksendebearbeitung
    Externer Browser Der Systembrowser öffnet die Login. Der Benutzer kehrt dann zum WPF zurück. Dies ist die Standardwahl. Temporäres Hören auf 127.0.0.1, mit freiem Port.
    Integrierter Browser (WebView2) Ein zum WPF gehörendes Fenster zeigt die Anmeldung an. Nach der Anmeldung schließt es sich automatisch. Die WPF fängt die Navigation zu http://127.0.0.1/callback/ ab, bevor sie geladen wird, und tauscht dann den Code aus. Es werden keine lokalen Netzwerk-Hörer geöffnet.

    Anpassung BrowserMode in appsettings.json wählt den Anfangswert: Extern oder Eingebettet. Die Liste erlaubt es, die Modi für die nächste Verbindung zu wechseln; sie schreibt die Konfigurationsdatei nicht um.

    Immersive Login wird im WebView2-Fenster der WPF-Anwendung angezeigt

    Das eingebaute Fenster zeigt den Serverursprung über dem Login an. Es behält die üblichen Schritte bei, einschließlich der Eingabe des sechsstelligen Codes und der Registrierung mit einem QR-Code, wenn der Server ihn anfordert. Stornieren, unterbricht der Close Cross, oder Timeout, die Verbindung und bringt die WPF an die WPF zurück.

    MFA-Verifizierung im eingebauten Fenster vor dem Abruf des Tokens

    Das WebView2-Profil ist privat und vom üblichen Browserprofil getrennt. Passwortspeichern und Autofill sind deaktiviert. Das Surfen außerhalb des konfigurierten Servers, neue Fenster, Downloads und Zugriff auf native Objekte werden blockiert. Keine Skripte zum Auslesen von Anmeldedaten werden vom Beispiel injiziert. Zertifikatsfehler werden nicht ignoriert.

    Der externe Browser bleibt die Standardwahl zur Isolierung der Authentifizierungsseite der Anwendung. Die eingebaute Variante eignet sich für eine masterte Anwendung: Ihr Host kann technisch auf die Webinhalte zugreifen. PKCE schützt den Codeaustausch, nimmt diese Möglichkeit jedoch nicht dem Programm, das WebView2 hostet. Die Prinzipien zum Schutz der Komponente sind in der Microsoft WebView-Dokumentation2.

    3.3 Bereite Stationen für WebView2 vor.

    Das WPF-Referenzprojekt Microsoft.Web.WebView2. Dieses Paket stellt die Steuerung und das Ladegerät bereit; das Microsoft Edge WebView runtime2 Muss für den integrierten Modus auf dem Computer vorhanden sein. Sein Vorhandensein ist getrennt von dem des Edge-Browsers. Wenn die Laufzeit fehlt, zeigt das Beispiel eine Nachricht an und ermöglicht die Auswahl des externen Browsers.

    Für eine Stelle ohne Internet planen Sie dieEvergreen Standalone-Installateur Die passende Architektur in Ihrem Bereitstellungsprozess. Der kleine Web-Bootstrapper erfordert einen Download und ist für eine komplett offline installierte Installation nicht geeignet. Die Verbindung kann auch im internen Netzwerk funktionieren, sobald die Laufzeit installiert ist. Ansicht WebView2 verteilen.

    Die technische Datei der Komponente wird unter %LOCALAPPDATA%/Immersive.Authentication.Sample/WebView2, an einem benutzerzugänglichen Ort. Das Anmeldeprofil wird im privaten Modus geöffnet. Die App speichert das Immersive Token in beiden Modi im Speicher.

    3.4 Code in deiner App wiederverwenden

    Die BrowserAuthenticationClient.cs enthält den eigenständigen Client. Es verwendet die Standard-.NET-Bibliotheken, um die Anfrage vorzubereiten, den Browser zu öffnen, die Rückgabe zu steuern und den Code auszutauschen. Es ist nicht abhängig vom Immersive SDK.

    using Immersive.Authentication.Wpf;
    
    using var http = new HttpClient(new HttpClientHandler
    {
        AllowAutoRedirect = false,
        UseCookies = false
    });
    
    var authentication = new BrowserAuthenticationClient(
        "https://localhost:44333", http);
    
    var session = await authentication.SignInAsync(
        "immersive-desktop", cancellationToken);
    
    // session.Token : token Immersive à garder en mémoire.
    // session.ExpiresAt : échéance du token.
    
    

    MainWindow.xaml.cs zeigt die Schaltfläche "Verbinden", "Beenden", den Sitzungszustand und den API-Aufruf. Du kannst den Namensraum der eigenständigen Datei ändern, wenn du sie in dein Projekt integrierst.

    Für den eingebauten Modus sind die Dateien EmbeddedLoginWindow.xaml und EmbeddedLoginWindow.xaml.cs ergänzen den eigenständigen Client. Der Aufruf erfolgt aus dem WPF-UI-Thread, wobei das Hauptfenster als Besitzer fungiert:

    var session = await EmbeddedLoginWindow.SignInAsync(
        this, authentication, "immersive-desktop", cancellationToken);
    
    

    Das Ergebnis hat dieselben Eigenschaften Token und ExpiresAt. Callback-Steuerungen und HTTP-Austausch bleiben in BrowserAuthenticationClient.cs ; Das Fenster kümmert sich nur darum, die letzte Navigation anzuzeigen und abzufangen.

    Die externe Browser-Methode kann eine Funktion erhalten openBrowser Wenn Ihre App bereits eine Browser-Offen-Abstraktion hat. Methoden CreateBrowserLoginRequest und CompleteBrowserLoginAsync Sie ermöglichen es, den Start und die Rückkehr getrennt zu verwalten, falls Sie bereits einen kompatiblen Rückrufmechanismus haben.

    Der Systembrowser speichert die Eingabe der Zugangsdaten auf der Serverseite. Diese Wahl folgt dem Prinzip, das für native Anwendungen von der RFC 8252. Ein iframe ist kein Integrationsmodus dieses Logins.

    4. Verwenden Sie das Web-Beispiel

    4.1 Start der Seite

    Die appsettings.json Des Projekts Immersive.Authentication.Web Enthält:

    {
      "Authentication": {
        "Server": "https://localhost:44333",
        "ClientId": "immersive-web",
        "ApiPath": "/api/Security/Mfa/Context"
      }
    }
    
    

    Aus Beispielen:

    dotnet run --project Immersive.Authentication.Web
    
    

    Offen https://localhost:5173. In Visual Studio öffnet das Startprofil diese Adresse automatisch. Die Rückroute ist https://localhost:5173/auth/callback ; es muss genau so in RestFrontage erklärt werden.

    Eigenständige Webanwendung vor dem Login
    1. Klick Einloggen : Der Tab wird zu RestFrontage weitergeleitet.
    2. Gib deine Zugangsdaten ein und dann gegebenenfalls den MFA-Code.
    3. Der Server leitet den Tab nach /auth/callback In deiner App.
    4. Das JavaScript überprüft die Rückgabe und tauscht den Code gegen das Token aus.
    5. Klick Ruf GET an um den Kontext des Berichts zu lesen.
    Zurück in der Webanwendung: Token empfangen und API-authentifizierte Antwort

    Dasselbe Web-Beispiel passt sein Layout an kleine Bildschirme an. Der Anmeldepfad und die Nutzung des Tokens bleiben gleich.

    Kleinbild-Webbeispiel: Login abgeschlossen und API-Antwort authentifiziert

    4.2 Verwenden Sie das JavaScript-Modul erneut

    Die Akten wwwroot/ImmersiveAuthentication.js und wwwroot/app.js den Verbindungsclient bzw. seine Integration in die Seite anzeigen. Der kleine ASP.NET Core-Server bedient diese Ressourcen und die öffentliche Konfiguration. Er erhält das Token nicht: Der Browser ruft RestFrontage direkt auf.

    import { ImmersiveAuthentication } from "/ImmersiveAuthentication.js";
    
    const authentication = new ImmersiveAuthentication({
        Server: "https://localhost:44333",
        ClientId: "immersive-web",
        RedirectUri: location.origin + "/auth/callback"
    });
    
    // Dans l'action « Se connecter » :
    await authentication.SignIn();
    
    

    Auf der Rückgabeseite erstellen Sie den Kunden mit denselben Optionen neu und rufen Sie dann auf:

    const session = await authentication.CompleteSignIn();
    // session.Token : token Immersive.
    // session.ExpiresIn : durée restante, en secondes.
    
    

    Das Modul speichert nur die vorläufige PKCE-Transaktion in sessionStorage während des Seitenwechsels. Diese Transaktion wird nach der Validierung gelöscht und der Code aus der Adresse des Browsers entfernt. Das Token wird nicht an localStorage, sessionStorage oder ein Cookie geschrieben.

    Die Rückgabe muss im selben Tab und am selben Ursprung wie die Anwendung erfolgen, die die Anfrage gestartet hat. Die Route /auth/callback muss direkt auf deinem Hosting zugänglich sein, selbst bevor JavaScript geladen wird. Im Beispiel gibt der Server zurück index.html für diese Straße.

    Für Ihre Unterkunft, behalten Sie Referrer-Policy: no-referrer Auf der Rückgabeseite sollten Drittanbieter-Ressourcen auf dieser Seite vermieden und die URL-Parameter nicht protokolliert werden. Eine Proxy- oder Hosting-Konfiguration sollte diese Eigenschaften erhalten.

    5. Ruf WebAPIs und OData auf

    5.1 Der gleiche Token unabhängig vom Kunden

    Sobald die Verbindung abgeschlossen ist, verwenden beide Anwendungen denselben Typ von Immersive Token. Sie fügen den Header hinzu Autorisierung: Träger auf ihre Anfragen. Hier ist die gleiche Operation in C#, JavaScript und HTTP; server bezieht sich auf den Ursprung von RestFrontage und token das Token erlangt.

    Eine erfolgreiche Antwort enthält AccountName. Für OData ändern Sie den Pfad zu einer OData-Route Ihrer Instanz: Der Header bleibt derselbe. Die Beispiele stellen nur GET-Anfragen. Sie verhindern, dass das Token über das Pfadfeld an einen anderen Server gesendet wird, und lehnen HTTP-Weiterleitungen bei authentifizierten Aufrufen ab.

    A 401 bedeutet, dass die Anfrage nicht authentifiziert ist oder das Token nicht mehr akzeptiert wird; Wiederhole die Verbindung. A 403 Bedeutet eine Ablehnung des Zugangs: Überprüfen Sie die Rechte und Regeln der entsprechenden API. Das Weitergeben von MFA gewährt nicht Zugriff auf alle Ressourcen.

    5.2 Ablauf und Ende der Sitzung

    Der Token behält seine übliche Gültigkeitszeit in Immersive. Die Austauschantwort zeigt seine Verbleibende Zeit. Die Samples hören auf, es zu verwenden, wenn es abläuft; dann ist eine neue Verbindung erforderlich. Diese Reise stellt kein Refresh-Token bereit.

    Lösche meine Sitzung entfernt das Token aus dem Speicher des Samples. Dieser Button widerruft das bereits an den Server ausgegebene Token nicht und trennt auch nicht alle anderen Anwendungen. Das Schließen der WPF-ausführbaren Datei oder das Neuladen des Web-Tabs löscht ebenfalls deren Verbindungsstatus.

    Projekte zeigen eine Sitzung freiwillig im Speicher an. Eine Anwendung, die eine Sitzung länger halten möchte, muss explizit ihre Speicher- und Abmelderichtlinie definieren. Für eine Seite mit Backend ist es möglich, das Token ausschließlich auf der Serverseite zu behalten.

    6. Verständnis des HTTP-Vertrags

    6.1 Startverbindung

    Die Anwendung erstellt Zufallswerte state und code_verifier. Die bereitgestellten Clients verwenden 32 zufällige Bytes, die in Base64URL codiert sind, ohne Auffüllung. Die Herausforderung ist BASE64URL(SHA256(ASCII(code_verifier))).

    Dann öffnet es diese Adresse im Browser und kodiert die Parameterwerte:

    GET {{server}}/api/Security/Browser/Authorize?response_type=code&client_id={{clientId}}&redirect_uri={{redirectUriEncoded}}&state={{state}}&code_challenge={{challenge}}&code_challenge_method=S256
    
    

    Starte die Integration nicht direkt, indem du sie öffnest /Login : Der Eingang Browser/Authorize enthält die Informationen des Antrags und der erwarteten Rückgabe. Die Verbindungsanfrage ist zehn Minuten gültig.

    Nach Erfolg leitet der Server auf das mit erklärte Rückruf um Code, Zustand und ISS. Nach dem Kündigen des Logins kehrt er zurück error=access_denied, Zustand und ISS. Eine ungültige Anfangsanfrage bleibt bei einem lokalen Fehler bestehen: Sie leitet nicht auf eine unautorisierte Adresse um.

    6.2 Einlösungscode

    Nach der Kontrolle des Rückrufs, state und iss, übergibt die Anwendung ein HTTP-Formular. Die Werte werden wie ein Formular codiert, ohne Konvertierung in JSON.

    Die Antwort enthält:

    {
      "access_token": "JWT Immersive",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    
    

    Die Dauer ist anschaulich. Diese drei Namen folgen dem OAuth-Vertrag, in Kleinbuchstaben. Der WPF-Client stellt frei Token und ExpiresAt, und das JavaScript-Modul wurde angezeigt Token und ExpiresIn. Die anderen Immersive WebAPIs behalten ihre PascalCase-Konvention bei.

    Straßen Browser/VerifyCredentials, Browser/VerifyTotp und Browser/Abbrechen sind Teil der inneren Abläufe der gehosteten Schnittstelle. Ihre Integrationsnutzungen Autorisieren und Token ; Sie muss die Anmeldeschritte nicht steuern.

    7. Weitere Integrationsmöglichkeiten

    WPF und JavaScript sind nicht die einzigen Optionen. Der Vertrag ist HTTP: Beide Projekte zeigen zwei Möglichkeiten, ihn zu nutzen, keine technologische Beschränkung.

    Integration Wo befindet sich der Token? Aktuelle Kompatibilität
    WPF, WinForms, Desktop-Tool oder interaktive Konsole Im Gedächtnis im Prozess. Externe Browserdurchquerung mit lokalem Schleifen-Rückruf. WPF stellt außerdem ein WebView2-Fenster bereit; die Anpassung an ein anderes Framework erfordert Browserkontrolle.
    React, Vue, Angular, JavaScript oder eine andere im Browser laufende Anwendung Im Gedächtnis im Tab. Das JavaScript-Modul kann in das gewählte Framework integriert werden. Deklarieren Sie eine echte HTTPS-Callback-Route und konfigurieren Sie CORS.
    Seite mit Backend: ASP.NET, PHP, Java, Node.js... In der Sitzung auf der Backend-Seite. Das Backend kann PKCE vorbereiten, den HTTPS-Callback empfangen und den Code austauschen. Der Browser erhält nur ein site-spezifisches Session-Cookie. Dieser Leitfaden beschreibt das Prinzip; er stellt keinen dritten Entwurf bereit.
    Mobile App Im Prozess der geschützten Speicherung der Plattform gemäß deren Design. Das Browserprinzip bleibt anwendbar. HTTPS-Verbindungen, die mit der Anwendung verbunden sind, erfordern eine Plattformintegration. Private Schemata wie monapp:// vom aktuellen Server nicht akzeptiert werden. Hier werden keine mobilen Beispiele bereitgestellt.
    Vollständig angepasste Verbindungsschnittstelle In der Anwendung, die direkt die MFA-APIs aufruft. Bestehende MFA-APIs ermöglichen diese Reise, aber die Anwendung muss Zugangsdaten, Registrierung, Codes und Fehler verwalten. Die gehostete Schnittstelle vermeidet diese Doppelarbeit.
    Service, Automatisierung oder geplante Aufgabe ohne Benutzer Das Anwendungsgeheimnis wird in ihrer geschützten Konfiguration gehalten. Verwenden Sie einen API-Schlüssel. Ein interaktiver MFA-Login ist nicht geeignet, ohne Personen zu laufen.

    7.1 Webvariante mit Backend

    In dieser Variante behält das Backend state und den PKCE-Beweis in der Benutzersitzung vor der Weiterleitung. Er steuert den Rückruf und tauscht dann den Code auf Serverseite aus. Anschließend behält er das Immersive Token und führt die API-Aufrufe für den Browser durch.

    sequenceDiagram
        participant N as Navigateur
        participant B as Backend de votre site
        participant R as RestFrontage
        N->>B: Se connecter
        B->>B: Stocker state et PKCE dans la session
        B-->>N: Redirection vers le login hébergé
        N->>R: Mot de passe et MFA éventuelle
        R-->>N: Redirection vers le callback du site
        N->>B: Callback avec code et state
        B->>B: Vérifier session, state et iss
        B->>R: Échanger code et PKCE
        R-->>B: Token Immersive
        B-->>N: Session du site, cookie sécurisé HttpOnly
        N->>B: Demander une ressource
        B->>R: Appeler l'API avec le token
        R-->>B: Résultat autorisé
        B-->>N: Résultat pour l'interface
    

    Insbesondere muss das Session-Cookie sicher, HttpOnly und für Browsing-Feedback geeignet sein. Schützen Sie die Aktionen der Seite gegen seitenübergreifende Anfragen. Das Token bleibt im Backend; es darf nicht über eine Dienstleistungsroute an den Browser zurückgesendet werden. PKCE und state bleiben in dieser Variante notwendig.

    8. Umfang und Diagnose

    8.1 Was dieser Kurs abdeckt

    Die veranstaltete Tour umfasst Benutzername/Passwort und TOTP, mit den Ausnahmen, der Erstregistrierung und der autorisierten Neuregistrierung, die in Immersive vorgesehen sind. Bestehende SSO-Anbieter sind noch nicht mit diesem Eintrag verbunden; deren eigener Betrieb bleibt eigenständig.

    Der Server verwendet die Autorisierungscode mit PKCE, aber ist nicht als vollständiger OpenID Connect-Anbieter dargestellt. Dieser Batch bietet keine OIDC-Entdeckung, kein ID-Token, keine Zustimmung durch Scopes, kein Aktualisierungstoken oder Geräteautorisierungsfluss. Eine Komponente, die diese Funktionen benötigt, kann ohne Anpassung nicht angeschlossen werden.

    Für mehrere RestFrontage-Instanzen muss der Bediener einen gemeinsamen persistenten Datenschutz-Schlüsselbund, dieselbe Datenschutz-Anwendungsidentität und dieselbe Sicherheitsdatenbank pflegen. JWT-Schlüssel und MFA-Einstellungen müssen ebenfalls konsistent sein. Ein Verlust temporärer Schutzmaßnahmen erfordert, dass aktuelle Verbindungen neu gestartet werden.

    8.2 Häufige Fehler beheben

    Symptom Verifikation
    Verbindungsanfrage ist beim Öffnen ungültig Überprüfen Sie den Issuer, ClientId aktiviert, den genauen Rückruf-Treffer und S256.
    Browser weigert sich HTTPS Überprüfen Sie die RestFrontage- und Website-Zertifikate, deren Namen und den Trust der Erweiterung.
    Die Anmeldung gelingt, aber die Webrückkehr schlägt fehl Überprüfen Sie die /auth/callback-Route, denselben Tab, sessionStorage, CORS Origins und den öffentlichen Namen des Servers.
    Der eingebaute Browser startet nicht Überprüfen Sie die WebView2-Laufzeit und die Rechte im Datenordner. Wählen Sie bei Bedarf den externen Browser.
    Eingebauter Browser lehnt Server ab Überprüfe dein HTTPS-Zertifikat und den konfigurierten Ursprungsbereich. Das Surfen zu einer anderen Domain ist blockiert.
    Das WPF-Fenster wartet nach der Anmeldung Überprüfe die Rückkehr zu 127.0.0.1 und temporärer Portierung, die lokalen Regeln der Erweiterung und starte dann erneut, falls die Wartezeit abgebrochen wurde.
    invalid_grant während des Austauschs Der Code kann abgelaufen, bereits in Gebrauch sein, mit einem anderen Beweis verknüpft oder durch eine Konto- oder Richtlinienänderung ungültig gemacht werden. Beginnen Sie von vorne mit der Anmeldung.
    Die API gibt 401 oder 403 zurück Überprüfen Sie die Gültigkeit des Tokens und die Rechte des Kontos für die betreffende Transaktion.
    Die Verbindung verschwindet nach einem Neuladen des Webs Dies ist das Verhalten dieses Beispiels: Das Token bleibt nur im Speicher.

    Protokollieren Sie keine Tokens, PKCE-Beweise, Passwörter, TOTP-Geheimnisse oder Rückrufeinstellungen. Dies gilt auch für IIS-, Reverse-Proxy- und Client-Anwendungsprotokolle. Allgemeine Best Practices sind im Folgenden detailliert beschrieben RFC 9700.

    8.3 Verifizieren Sie Ihre Integration

    Teste ein Konto, das MFA unterliegt, ein Konto, das erstmals eingerichtet werden muss, und, falls deine Richtlinie es erlaubt, ein befreites Konto. Überprüfe außerdem auf Stornierung, TOTP-Fehler und verweigerten API-Zugriff wegen fehlender Rechte.

    Das erwartete Ergebnis ist immer dasselbe: Deine Anwendung ruft ein Token erst nach den vom Server geforderten Verbindungsschritten ab. Sie können dann die APIs innerhalb der Rechte des Kontos nutzen.