2009-08-17 7 views
0

Ich verwende derzeit eine sehr einfache benutzerdefinierte Implementierung von MembershipProvider in einer ASP.NET-Webanwendung. Da meine Anforderungen an die Mitgliedschaft steigen, scheint es sehr sinnvoll zu sein, eine vorhandene, funktionsreiche und gut getestete Implementierung wie SqlMembershipProvider zu verwenden. Ich habe herausgefunden, wie man die gespeicherten aspnet_Mebership-Prozeduren verwendet, um Benutzer aus meinen benutzerdefinierten Tabellen zu erstellen, aber ich stecke auf das Passwort fest. Meine benutzerdefinierte Implementierung verwendet kein Salz und SqlMembershipProvider scheint es zu erfordern.Wie von benutzerdefinierten Mitgliedschaftsanbieter zu SqlMembershipProvider migrieren?

Ich möchte, dass dies für meine Benutzer reibungslos abläuft und nicht erfordert, dass alle ihr Kennwort bei der ersten Anmeldung nach der Änderung aktualisieren.

Wie migriere ich Hash-Passwörter von einer benutzerdefinierten Implementierung (siehe unten) zu SqlMemberhipProvider?

FormsAuthentication.HashPasswordForStoringInConfigFile(password, FormsAuthPasswordFormat.SHA1.ToString()) 

aktualisieren: sollte ich klarstellen, dass meine benutzerdefinierten Anbieter eine Implementierung von MembershipProvider ist, nur nicht ein voll ausgestatteter ein. Außerdem habe ich versucht, aspnet _Membership _CreateUser mit leeren Salz, aber die Hashes nicht übereinstimmen.

+0

Ich persönlich finde die Standard-Mitgliedschaft Anbieter einen Schmerz im Hintern, und im Grunde völlig unbrauchbar .. YMMV: P – Thorarin

+0

@Thorarin - Was magst du nicht über SqlMembershipProvider? – jrummell

+0

Ich gab nach ein paar Tagen des Versuchens auf, meine Benutzer zu migrieren. Ich werde nur die fehlenden Funktionen zu meinem benutzerdefinierten Anbieter hinzufügen. – jrummell

Antwort

1

Sie können einen benutzerdefinierten Hash-Algorithmus schreiben, der das Salz entfernt (die ersten 16 Bytes des kombinierten Salt-and-Password).

http://forums.asp.net/t/981295.aspx

Alternativ könnten Sie wahrscheinlich Ihre eigene Klasse schreiben, die MembershipProvider erbt, aber dies würde mehr Arbeit.

1

Ihre beste Wette wäre zu versuchen, die SqlMembership Benutzer manuell (über die gespeicherten Prozeduren) mit einem leeren Salz zu erstellen.

Wenn das nicht funktioniert, ich glaube, Sie mit dem SqlMembershipProvider kein Glück, aber man konnte immer schreiben Sie Ihre eigene MembershipProvider (möglicherweise sogar auf der Grundlage der SqlMembershipProvider den eigenen Back-End). Es ist nicht so schwer.

+0

@Ruben - Du und Axl verdienen beide einen Antwort-Kredit, aber Axl braucht den Vertreter mehr :) – jrummell

+0

Ich kann damit leben :-) – Ruben

0

Überschreiben Sie die Klasse System.Web.Security.SqlMembershipProvider und überschreiben Sie so viele oder so wenige Methoden, wie Sie anpassen müssen.

web.config hier nicht zu sehen. aber die Tatsache, dass du deine eigene Gewohnheit hast, funktioniert überhaupt nicht, ich bin nicht dieser Teil ein Stolperstein.

public class SqlMembershipProviderOverride : System.Web.Security.SqlMembershipProvider 
{ 
    public static readonly string FORCED_OVERRIDE_APPLICATION_NAME = "MyApplicationName"; 

    public SqlMembershipProviderOverride() 
    { 
     this.ApplicationName = FORCED_OVERRIDE_APPLICATION_NAME; 
    } 

    public override System.Web.Security.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status) 
    { 
     return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); 
     /* 
       Do "your own thing" in this or any other override method 
     */ 

    } 


} 
Verwandte Themen