2017-12-07 2 views
0

Nehmen wir an, wir haben zwei APIs, eine für UserManagement und eine für Auth.DataProtection - Maschinenschlüssel zwischen mehreren Anwendungen teilen

UserManagement API ist verantwortlich für die erste Einladung E-Mail (wo ich ein ResetPasswordToken brauchen, weil dieser Fluss meines aktuelle App ist) und Auth API ist für Passwort-Wiederherstellung verantwortlich (wobei i ein ResetPasswordToken benötigen).

Natürlich muss ich für beide Anwendungen den gleichen Maschinenschlüssel angeben.

Nehmen wir auch an, dass diese beiden Anwendungen hinter einem Load Balancer bereitgestellt werden. 2 Apps x 3 Instanzen.

Es ist ausreichend, denselben gemeinsamen Speicherort für persistierende Schlüssel (Redis oder so) in beiden APIs zu haben?

services.AddDataProtection().PersistKeysToRedis(/* */); 

Ich denke, dass, wenn es für eine App funktioniert, mehrere Instanzen Szenario, wird es auch für mehrere Anwendungen, mehrere Instanzen Szenario arbeiten.

P. S: Ich nicht in der Lage war, etwas über jeden Verriegelungsmechanismus zu finden (es scheint, dass es eine nur auf der Suche, wie es sich verhält)

Eine andere Sache, die ich von besorgten bin: Zustand Rennen ?!

Duc_Thuan_Nguy 9. Juni 2017

Aus Neugier, wie funktioniert Schlüssel Roll Griff Gleichzeitigkeit? Angenommen, wir haben eine Webfarm mit 2 Rechnern und einem freigegebenen Netzwerkverzeichnis. Es kann eine Wettlaufsituation geben, in der beide Maschinen gleichzeitig einen neuen Schlüssel rollen möchten. Wie wird diese Situation behandelt? Oder die zwei Maschinen können ihre eigenen neuen Schlüssel rollen und solange sie Zugang zu beiden neuen Schlüsseln haben, können sie Daten reibungslos ungeschützt?

Kommentar Referenz: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-management

Später bearbeiten: Es sieht aus wie wenn Sie mehrere Anwendungen haben es nicht ausreichend ist, um anzugeben, dass Sie die Schlüssel in der gleichen Position beharren wollen. Es gibt ein Konzept des Anwendungsdiskriminators (alle Apps sind isoliert).

Sie werden so etwas wie die folgenden Voraussetzungen:

services.AddDataProtection(configure => { 
       configure.ApplicationDiscriminator = "App.X"; 
      }).PersistKeysToRedis(/* */); 

Sperren und Race-Bedingung Fragen sind nach wie vor gültig.

+0

Seine typischen Ihren einen Load-Balancer, um sicherzustellen, mit, dass die Server hinter dem Load Balancer haben den gleiche Maschine Schlüssel konfigurierte auf dem Server. Sie möchten, dass jeder Server im Wesentlichen identisch ist. – Liam

Antwort

1

Nein, es ist nicht ausreichend. Die Datensicherung von ASP.NET Core isoliert Anwendungen standardmäßig auf der Grundlage von Dateipfaden oder IIS-Hostinformationen, sodass mehrere Apps einen einzelnen Schlüsselbund gemeinsam nutzen können, aber dennoch nicht in der Lage sind, die Daten des jeweils anderen zu lesen.

Als docs state

standardmäßig isoliert die Datenschutzsystem-Anwendungen voneinander, auch wenn sie den gleichen physikalischen Schlüssel-Repository teilen.Diese verhindert, dass die Apps gegenseitig die geschützten Nutzdaten verstehen. Um Nutzlasten zwischen zwei Anwendungen geschützt zu teilen SetApplicationName Verwendung mit dem gleichen Wert für jede App

+0

In Anbetracht der Tatsache, dass beide Apis denselben Anwendungsnamen verwenden, müssen wir uns Sorgen darüber machen, welche den Schlüssel generieren wird? Oder wenn es Probleme mit dem Rennen gibt? –

+1

Nein, das haben wir getestet, indem wir die Gültigkeitsdauer des Schlüssels auf eine Minute hackten und 50 VMs starteten – blowdart

Verwandte Themen