Seltene Fehler mit WIF RTM, treten nach dem Zurücksetzen IIS
-
22-09-2019 - |
Frage
Ich meine Web-Anwendung 7.5 auf Windows Server 2008 mit IIS-Hosting, Ich habe 2 Web-Anwendungen: 1. Die erste ist der Kern sso (Single Sign-on) Service mit einer Login-Seite. 2. ein andere Web-Anwendung wird auf dem Web-Server gehostet, der die erste App für sso verwenden.
Ich bin die WIF RTM Implementierung mit der sso,
in der Regel, es läuft gut ohne Probleme, kann der Benutzer anmelden, um den sso werfen und die Startseite umleiten zurück. aber wenn ich die sso ersten Wurf mit, dann die IIS neu zu starten, wenn ich wieder in die zweite Anwendung kommen und aktualisieren Sie die Seite, bekam ich folgende Fehlermeldung:
Serverfehler in der Anwendung '/'. Schlüssel ist nicht gültig für den Einsatz in bestimmten Zustand. Beschreibung: Eine nicht behandelte Ausnahme trat während der Ausführung der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über den Fehler und wo es entsteht im Code.
Ausnahmedetails: System.Security.Cryptography.CryptographicException: Schlüssel ist nicht gültig für die Verwendung in bestimmten Zustand.
Quellfehler: Eine nicht behandelte Ausnahme während der Ausführung des erzeugten wurde die aktuelle Web-Anfrage. Information über den Ursprung und die Position von die Ausnahme kann mit identifiziere die Ausnahme-Stack-Trace.
Stack-Trace:
[Cryptographic: Key nicht gültig für den Einsatz in bestimmten Zustand. ]
System.Security.Cryptography.ProtectedData.Unprotect (Byte [] EncryptedData, Byte [] optionalEntropy, DataProtectionScope scope) +425
Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode (Byte [] codiert) +59[InvalidOperationException: ID1073: A Cryptographic trat auf, wenn Versuch, das Cookie zu entschlüsseln unter Verwendung von die ProtectedData API (siehe Innen Ausnahme für weitere Details). Wenn du bist mit IIS 7.5, könnte dies darauf zurückzuführen sein die Loaduserprofile Einstellung auf die Application Pool wird auf false gesetzt. ] Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode (Byte [] codierten) +151
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms (Byte [] Cookie, Boolean outbound) +109
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken (XmlReader Leser, SecurityTokenResolver tokenResolver) 634
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken (Byte [] Token, SecurityTokenResolver tokenResolver) +105
Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie (Byte [] Sessioncookie) +239
Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie (SessionSecurityToken & session) +59
Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest (Object sender, EventArgs EventArgs) +52
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +68 System.Web.HttpApplication.ExecuteStep (IExecutionStep Schritt, Boolean & completedSynchronously) +75________________________________________ Versionsinformationen: Microsoft .NET Framework Version: 2.0.50727.4927; ASP.NET Version: 2.0.50727.4927
die Benutzersitzung gespeichert wird von SQLServer Session-Modus, ich bin eine spezielle Datenbank für diese verwendet wird.
Ich habe viel versucht, und ich kann nicht wieder Prozedur dieses Problem auf meinem lokalen Rechner (Windows7). hat jemand ähnliche Erfahrung? können Sie mir sagen, wie dieses Problem zu lösen?
Lösung
Das könnte gut sein, weil Ihre Anwendung Pool-Benutzer kein persistentes Benutzerprofil haben. Um dies zu beheben können Sie nur etwas, als dieser Benutzer ausführen:
runas /user:<domain>\<user> cmd
Und das wird das Profil erstellen. Anschließend sollte die Daten werden entschlüsselt, nachdem IIS neu zu starten.
Andere Tipps
Ich löse dieses Problem endlich durch eine Änderung des Anwendungspool Benutzer an einem lokalen Benutzer. das Problem wahrscheinlich durch die sso verursacht wird, auf einem 64-Bit-OS gehostet wird, existiert dieses Problem nicht auf, wenn ich die sso auf einem 32-Bit-Host-Computer (auch ich einen Domain-Benutzer für den Anwendungspool verwenden).
Jetzt benutze ich Application oder Netzwerk-Service, die Ausnahme verschwunden, nachdem ich IIS neu starten.
Danke euch allen, und ich bin so froh, mit Ihnen meine Lösung zu teilen.
Es scheint eine gewisse Art von Sicherheitsproblem zu sein, wenn Sie mehrere Anwendungen haben die gleiche Domäne auf Windows Server 2008 mit IIS 7.5
Austausch Wenn Sie Urls http://ourdomain.com/app1
und http://ourdomain.com/app2
haben Sie in auf einer App mit WIF anmelden können, aber wenn Sie die andere App Zugriff erhalten Sie diesen Fehler. Dies liegt daran, das Cookie für die Domäne ist, aber wenn Es ist von app1 erstellt dann app2 nicht darauf zugreifen kann.
So ist die Lösung entweder als Aaron zu tun und einen bestimmten Benutzer verwenden, die Zugriffsrechte hat oder wie wir, trennen Sie die Anwendungen auf zwei verschiedenen Domänen, dh http://app1domain.com/
und http://app2domain.com/
.