Ich versuche, ASP.NET Authentifizierung und Autorisierung zusätzlich zu unserer bestehenden Datenbank zu implementieren. Wir haben eine Website, die einen Webservice aufruft, um ihre Daten abzurufen. Um den Webservice nutzen zu können, muss ich den Benutzernamen und das Passwort angeben. Mit diesem Wissen habe ich beschlossen, IIdentity und IPrincipal zu implementieren, um das verschlüsselte Passwort zu speichern und bei Webservice-Anrufen zur Verfügung stellen zu können. In Zukunft möchten wir vielleicht mehr von der integrierten Sicherheit von asp.net verwenden, also implementiere ich Mitgliedschaft und Rollenanbieter und überschreibe genau das, was ich brauche (ValidateUser und GetRoles) Obwohl ich den Benutzer dank der Implementierung des Mitgliedschaftsanbieters validiert habe, setze ich immer noch meine eigene CustomIdentity auf den Context.User, um bei Bedarf das Passwort abrufen zu können.
Es funktioniert einwandfrei, solange der Benutzer die Seite besuchen darf. Aber wenn der Benutzer abgelehnt wird, löst das Framework eine Ausnahme für die Serialisierung auf meiner CustomIdentity aus, anstatt eine AccessDeniedException auszulösen. Ich habe ein perfekt ähnliches Verhalten mit mehr Details auf diesem Link gefunden, aber keine Antwort wurde gepostet.
Meine Ausnahme ist genau die gleiche wie auf dem obigen Link
%Vor%Ist es richtig, Mitgliedschaft und benutzerdefinierte Identity und IPrincipal gleichzeitig zu verwenden? Wenn nicht, wo fügen Sie Eigenschaften wie das Passwort oder andere Benutzerdaten hinzu, wenn ich die Mitgliedschafts- und Rollenanbieter verwende?
Mit freundlichen Grüßen
Stephane Erbrech
nach ein paar mehr Tests, je nachdem, was der Link, sagte ich, es scheint, dass dieser Fehler nur passiert, wenn ich im Debug-Modus von Visual Studio ausführen. Wenn ich das Projekt in IIS ausführen, ist der Fehler verschwunden und die Sicherheitsimplementierung funktioniert wie erwartet.
--- Ist das ein Fehler im Lightweight-Webserver, der in Visual Studio implementiert ist? ---
Bearbeiten: Sie können in den Eigenschaften Ihres Webprojekts gehen, auf die Registerkarte "Web" gehen und "IIS lokalen Server verwenden" auswählen. Dazu müssen Sie jedoch Visual Studio als Administrator ausführen und IIS auf Ihrem Computer installieren, damit VS beim Laden des Projekts das virtuelle Verzeichnis auf dem lokalen IIS-Server erstellen kann.
Das ist vielleicht nicht die richtige Antwort, aber ich habe dieses Problem auch behoben, aber behoben.
Ursprünglich hatte ich nur eine benutzerdefinierte Klasse, die GenericIdentity
(oder implimented IIdentity
) geerbt hat. Als ich schließlich eine benutzerdefinierte Klasse erstellt habe, die GenericPrincipal
(oder implimented IPrincipal
) geerbt hat, hat alles funktioniert?
Meine CustomPrincipal
Klasse hat nichts anderes als geerbt von GenericPrincipal
und hatte einen Konstruktor, der den Basiskonstruktor aufgerufen hat.
Sowohl die CustomPrincipal
als auch die CustomIdentity
Klassen haben KEIN Serialization
oder ISerializable
gefüttert. Andererseits war mein Unterricht sehr einfach.
Sie können in den Eigenschaften Ihres Webprojekts gehen, auf die Registerkarte "Web" gehen und "Use local IIS Server" auswählen. Dazu müssen Sie jedoch Visual Studio als Administrator ausführen und IIS auf Ihrem Computer installieren, damit VS beim Laden des Projekts das virtuelle Verzeichnis auf dem lokalen IIS-Server erstellen kann.
Ich hatte das gleiche Problem, als ich versuchte, die Webanwendung mit CustomIdentity auszuführen. Um das Projekt für die Verwendung Ihres IIS in VS 2008 festzulegen, müssen Sie die URL für Ihren Anwendungspool in Ihrem Webanwendungsprojekt definieren.
Tags und Links serialization asp.net-membership access-denied iprincipal iidentity