Frage

Ich versuche ASP.NET Authentifizierung und Autorisierung auf unserer bestehenden Datenbank zu implementieren. Wir haben eine Webseite einen Webservice Aufruf, seine Daten zu holen. Um den Webservice zu nutzen, ich brauche die Benutzername und das Kennwort zur Verfügung zu stellen. Zu wissen, dass, entschied ich mich IIdentity und IPrincipal zu speichern das verschlüsselte Passwort zu implementieren und in der Lage sein, es zu schaffen, wenn webservice Anrufe durchführen. In Zukunft könnten wir mehr von der integrierten Sicherheits von asp.net verwenden, so dass ich die Mitgliedschaft und Rollenanbieter implementieren und außer Kraft setzen genau das, was ich brauche (ValidateUser und GetRoles) Obwohl, nachdem der Benutzer dank der Mitgliedschaft Provider-Implementierung Validierung ich noch meine eigenen CustomIdentity zum Context.User bin die Einrichtung in der Lage sein Kennwort abzurufen, wenn nötig.

Es funktioniert perfekt, solange der Benutzer berechtigt ist, die Seite zu besuchen. aber wenn der Benutzer verweigert wird, anstatt eine AccessDeniedException werfen, wirft das Framework eine Serialisierung Ausnahme auf meinem CustomIdentity. Ich fand ein perfekt ähnliches Verhalten mit mehr Details zu diesem Link beschrieben , aber keine Antwort geschrieben wurde.

Meine Ausnahme ist genau die gleiche wie auf dem oberen Link


Type is not resolved for member'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[SerializationException: Type is not resolved for member 'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.]
   Microsoft.VisualStudio.WebHost.Connection.get_RemoteIP() +0
   Microsoft.VisualStudio.WebHost.Request.GetRemoteAddress() +65
   System.Web.HttpRequest.get_UserHostAddress() +18
   System.Web.HttpRequest.get_IsLocal() +13
   System.Web.Configuration.CustomErrorsSection.CustomErrorsEnabled(HttpRequest request) +86
   System.Web.HttpContext.get_IsCustomErrorEnabled() +42
   System.Web.Configuration.UrlAuthFailedErrorFormatter.GetErrorText(HttpContext context) +16
   System.Web.Security.UrlAuthorizationModule.WriteErrorMessage(HttpContext context) +29
   System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +8777783
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

Ist es richtig, Mitgliedschaft und benutzerdefinierte IIdentity und IPrincipal zugleich zu benutzen? Wenn nicht, wo Eigenschaften wie das Passwort oder andere Benutzerdaten hinzufügen, wenn ich die Mitgliedschafts- und Rollenanbieter verwenden?

Mit freundlichen Grüßen,

Stephane Erbrech

War es hilfreich?

Lösung

Nach einigen weiteren Tests, je nachdem, was die Verbindung, die ich sagte Veröffentlichte vor, so scheint es, dass dieser Fehler nur geschieht, wenn ich im Debug-Modus von Visual Studio ausgeführt werden. Wenn ich das Projekt festgelegt in IIS ausgeführt wird, wird der Fehler verschwunden und die Sicherheitsimplementierung wie erwartet funktioniert.

--- Ist das ein Bug in der leichten Webserver in Visual Studio implementiert dann? ---

Edit: Sie können in den Eigenschaften Ihres Webprojektes gehen, gehen Sie auf die Registerkarte „Web“, und überprüfen Sie „lokalen IIS-Server verwenden“. Dies wird jedoch benötigen Sie Visual Studio als Administrator ausführen und IIS auf Ihrem Computer installiert hat, so dass VS das virtuelle Verzeichnis in dem lokalen IIS-Server erstellen kann, wenn es um das Projekt lädt.

Andere Tipps

In meinem Fall habe ich einfach von MarshalByRefObject hatte erben.

public class IcmtrIdentity :  MarshalByRefObject, IIdentity
{
   ...
}

Dies ist vielleicht nicht die richtige Antwort sein, aber ich hatte auch dieses Problem, aber es behoben.

Ursprünglich habe ich nur eine benutzerdefinierte Klasse hatte die GenericIdentity geerbt (oder implimented IIdentity). Als ich endlich eine eigene Klasse geschaffen, die GenericPrincipal (oder implimented IPrincipal) inheritted dann alle es hat funktioniert?

meine CustomPrincipal Klasse tat nichts anderes als geerbt von GenericPrincipal und hatte einen Konstruktor, der die Basis-Konstruktor aufgerufen.

Sowohl die CustomPrincipal und CustomIdentity Klassen haben impliment KEINE Serialization oder ISerializable Sachen. Dann wieder, meine Klassen waren alle sehr einfach.

  

Sie können in den Eigenschaften Ihres Webprojektes gehen, gehen Sie auf die Registerkarte „Web“, und überprüfen Sie „lokalen IIS-Server verwenden“. Dies wird jedoch benötigen Sie Visual Studio als Administrator ausführen und IIS auf Ihrem Computer installiert hat, so dass VS das virtuelle Verzeichnis in dem lokalen IIS-Server erstellen kann, wenn es um das Projekt lädt.

Ich hatte das gleiche Problem bei dem Versuch, den Web-App mit CustomIdentity auszuführen. Um das Projekt zu setzen Ihre IIS in VS 2008 zu verwenden, müssen Sie die URL zu Ihrem Anwendungspool in Ihrem Web-Anwendung-Projekt definieren.

Dies kann auch durch Hinzufügen der Baugruppe enthält Ihre benutzerdefinierte Identität mit dem GAC auf Ihrer dev Maschine gelöst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top