Betrachten wir ein allgemein bekanntes ASP.NET Core-Szenario. Zuerst fügen wir die Middleware hinzu:
%Vor%Dann ein Prinzipal serialisieren:
%Vor%Nach diesen beiden Aufrufen wird ein verschlüsselter Cookie auf der Client-Seite gespeichert. Sie können das Cookie (in meinem Fall wurde es chunked) in jedem Browser devtools sehen:
Es ist kein Problem (und keine Frage) mit Cookies aus dem Anwendungscode zu arbeiten.
Meine Frage ist: Wie entschlüsselt man den Cookie außerhalb der Anwendung ? Ich denke, dass ein privater Schlüssel dafür benötigt wird, wie man es bekommt?
Ich habe die Dokumentation überprüft und nur allgemeine Wörter gefunden:
Dies erstellt ein verschlüsseltes Cookie und fügt es dem aktuellen hinzu Antwort. Der während der Konfiguration angegebene AuthenticationScheme muss auch beim Aufruf von SignInAsync verwendet werden.
Unter den Abdeckungen ist die verwendete Verschlüsselung der Datenschutz von ASP.NET System. Wenn Sie auf mehreren Rechnern hosten, Lastausgleich oder Wenn Sie eine Webfarm verwenden, müssen Sie den Datenschutz konfigurieren Verwenden Sie denselben Schlüsselring und dieselbe Anwendungskennung.
Also, ist es möglich, das Authentifizierungs-Cookie zu entschlüsseln, und wenn ja, wie?
UPDATE # 1: Basierend auf Ron C große Antwort und Kommentare , ich habe am Ende Code:
%Vor% Leider erzeugt dieser Code immer eine Ausnahme bei Unprotect
Methodenaufruf:
CryptographicException in Microsoft.AspNetCore.DataProtection.dll: Zusätzliche Information: Die Nutzlast war ungültig.
Ich habe verschiedene Varianten dieses Codes auf mehreren Maschinen ohne positives Ergebnis getestet. Wahrscheinlich habe ich einen Fehler gemacht, aber wo?
UPDATE # 2: Mein Fehler war, dass DataProtectionProvider
nicht in UseCookieAuthentication
gesetzt wurde. Danke nochmal an @RonC.
Es ist erwähnenswert, dass Sie nicht auf die Schlüssel zugreifen müssen, um das Authentifizierungs-Cookie zu entschlüsseln. Sie müssen nur das richtige IDataProtector
verwenden, das mit dem richtigen Parameter für den Zweck erstellt wurde, und die Parameter für den Teilbereich verwenden.
Basierend auf dem CookieAuthenticationMiddleware
Quellcode Ссылка sieht so aus, als ob der Zweck, den du erfüllen musst, typeof(CookieAuthenticationMiddleware)
ist. Und da sie zusätzliche Parameter an die IDataProtector
übergeben, müssen Sie sie anpassen. Diese Codezeile sollte Ihnen also ein IDataProtector
liefern, mit dem das Authentifizierungs-Cookie entschlüsselt werden kann:
Beachten Sie, dass Options.AuthenticationScheme
in diesem Fall nur "MyCookie" ist, da dies in der Methode Configure
der Datei startup.cs festgelegt wurde.
Hier ist eine Beispiel-Aktionsmethode zum Entschlüsseln Ihres Authentifizierungs-Cookies auf zwei verschiedene Arten:
%Vor% Diese Methode verwendet eine IDataProtectionProvider
namens provider
, bei der der Konstruktor injiziert wird.
Wenn Sie Cookies zwischen Anwendungen freigeben möchten, können Sie die Datenschutzschlüssel in einem Verzeichnis speichern. Dazu fügen Sie der Methode ConfigureServices
der Datei startup.cs Folgendes hinzu:
ACHTUNG, obwohl die Schlüssel nicht verschlüsselt sind, liegt es an Ihnen, sie zu schützen !!! Behalten Sie die Schlüssel zu einem Verzeichnis nur bei, wenn Sie unbedingt müssen (oder wenn Sie nur versuchen zu verstehen, wie das System funktioniert). Sie müssen auch ein Cookie DataProtectionProvider
angeben, das diese Schlüssel verwendet. Dies kann mit Hilfe der UseCookieAuthentication
-Konfiguration in der Configure
-Methode der startup.cs-Klasse wie folgt geschehen:
Mit dieser Konfiguration fertig. Sie können das Authentifizierungs-Cookie jetzt mit folgendem Code entschlüsseln:
%Vor%Sie können mehr über dieses letztere Szenario hier erfahren: Ссылка
Tags und Links security authentication asp.net-core asp.net-core-mvc cookies