Wie entschlüsselt man einen ASP.NET Core Authentication Cookie manuell?

8

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.

    
Ilya Chumakov 16.03.2017, 18:49
quelle

1 Antwort

10

Entschlüsseln des Authentifizierungs-Cookies, ohne die Schlüssel zu benötigen

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:

%Vor%

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.


Entschlüsseln des Authentifizierungs-Cookies, wenn Schlüssel in einem Verzeichnis beibehalten werden

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:

%Vor%

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:

%Vor%

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: Ссылка

    
Ron C 17.03.2017, 12:39
quelle