Ich habe in den MSDN-Foren, im Blog von Dominic Baier und in anderen Quellen gelesen, dass DPAPI in Azure nicht out-of-the-box funktioniert und dass ein Ansatz zur Behandlung der föderierten Authentifizierung in jedem Webfarmszenario ersetzt werden muss Die DPAPI wird mit einer transformiert, die einen privaten Schlüssel verwendet, der in der Farm verfügbar ist, z. B. die RSA-Verschlüsselung mit einem X509-Zertifikat. Ich habe diesen Ansatz in meiner Azure MVC-Anwendung verwendet und die SessionSecurityTokenHandler
folgendermaßen konfiguriert:
Mit dieser Konfiguration können wir Token von einem Identitätsanbieter erhalten und sichere Cookies ausstellen, die mit diesen Transformationen verschlüsselt wurden. Im Azure-Emulator läuft alles wie erwartet. In der Azure-Umgebung sehen wir jedoch zeitweilig den folgenden Fehler im Browser:
%Vor% Dies deutet darauf hin, dass SessionSecurityTokenHandler
versucht, den Cookie mithilfe von DPAPI zu entschlüsseln, aber warum? Habe ich es nicht für die Verwendung von RSA konfiguriert?
Nun, nach langem Suchen habe ich herausgefunden, was mein Problem war. Bevor ich ServiceConfigurationCreated
eingerichtet habe, habe ich eine Konfiguration durchgeführt, die einen Zugriff auf FederatedAuthentication.ServiceConfiguration
verursachte. Laut MSDN "Das ServiceConfigurationCreated-Ereignis wird ausgelöst, wenn der Das erste HTTP-Modul in der Webanwendung verweist auf "ServiceConfiguration". Ich habe das Event-Handler-Setup an den Anfang von Application_Start
verschoben und alles hat so funktioniert wie es sollte, was bedeutet, dass das Event - das nur einmal ausgelöst wird - ausgelöst wurde, bevor ich den Event-Handler eingerichtet hatte.
Hoffentlich rettet das jemanden die 4+ Stunden, die ich gebraucht habe, um dies zu Boden zu bringen.
Beachten Sie, dass Sie jetzt das MachineKeySessionSecurityTokenHandler
um Sitzungstokens über Webfarmen zu signieren und zu verschlüsseln.
Um dies zu verwenden, müssen Sie den Standard SessionSecurityTokenHandler
entfernen und den MachineKeySessionSecurityTokenHandler
in Web.config
hinzufügen:
Der MachineKeySessionSecurityTokenHandler
verwendet den in Web.config
konfigurierten Maschinenschlüssel, daher müssen Sie diesen ebenfalls hinzufügen:
Siehe diese Frage auf BrainThud
Tags und Links asp.net-mvc azure wif session-cookies