Frage

Ich bin derzeit der Gestaltung eines Membership / Profil Schema für ein neues Projekt an dem ich arbeite, und ich hatte gehofft, eine Eingabe von anderen zu bekommen.

Das Projekt ist eine ASP.NET Web-Anwendung und aufgrund des kurzen Zeitrahmen, ich versuche jeden und alles, was ich kann in .NET Framework-Komponenten gebaut zu verwenden. Die Website wird wahrscheinlich <5000 Benutzer unterhalten. Jeder Benutzer erhält ein Profil hat, wo benutzerdefinierte Einstellungen und Objekte zwischen den Besuchen beibehalten werden.

Ich bin verpflichtet, eine vorhandene Active Directory für die Authentifizierung zu verwenden. Da das AD-Schema nicht erweitert werden kann, neue Felder zu halten, ich bin verpflichtet, Benutzereinstellungen und Objekte in einem anderen Datenspeicher zu halten. Ich habe auch gesagt, ADAM ist wahrscheinlich nicht eine mögliche Lösung.

Ich habe gehofft, dass der Active Directory-Mitgliedschaftsanbieter für mein Authentifizierungsschema und die SQL-Profil-Provider als Benutzerprofil-Datenspeicher zu verwenden. Ich würde es vorziehen, nicht ein eigenes Profil Provider zu bauen, aber ich sehe nicht, diese Aufstellung ein großes Problem, wenn es sein muss.

Ich frage mich, ob dies auch eine mögliche Lösung ist, und wenn ja, hat jemand hatte kein Glück mit diesem Ansatz.

Jede mögliche Kommentare sehr geschätzt.

Danke.

War es hilfreich?

Lösung

Zunächst einmal -. Ich habe nie selbst getan

Es ist eine wirklich ausgezeichnete Serie (14 !! Teile) auf dem ganzen Thema ASP.NET 2.0 Mitgliedschaft, Rollen und Profil-Provider-Systeme von Scott Mitchell unter 4 Jungs aus Rolla .

Nach meinem Verständnis, sollte es möglich sein, dieses Verhalten zu konfigurieren, die Sie suchen, indem Sie grundsätzlich diese beiden Abschnitte in Ihrer web.config:

  <!-- configure Active Directory membership provider -->
  <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
    <providers>
      <add name="AspNetActiveDirectoryMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=2.0.3600, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </membership>

  <!-- configure SQL-based profile provider -->      
  <profile defaultProvider="SqlProvider">
    <providers>
      <add name="SqlProvider"
        type="System.Web.Profile.SqlProfileProvider"
        connectionStringName="SqlProfileProviderConnection"
        applicationName="YourApplication" />
    </providers>

    <!-- specify any additional properties to store in the profile -->   
    <properties>
      <add name="ZipCode" />
      <add name="CityAndState" />
    </properties>
  </profile>

Ich würde denken, dies sollte funktionieren: -)

Andere Tipps

Zusätzlich dazu, wie Marc antwortete:

<add name="AspNetActiveDirectoryMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=2.0.3600, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />

Sie können auch hinzufügen müssen

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

mit corresponnding Verbindungszeichenfolge

<connectionStrings>
    <add name="ADService" connectionString="LDAP://ServerIP" />
</connectionStrings>

Wenn Sie .net 4.0 verwenden, dann müssen Sie ersetzen

Version=2.0.3600 

mit

Version=4.0.0.0

So schließlich

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <add name="AspNetActiveDirectoryMembershipProvider"
             connectionStringName="ADService"
             type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=4.0.0.0, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a"
             attributeMapUsername="sAMAccountName"/>
      </providers>
    </membership>

und da es als Standard eingestellt ist, kann es als Bezug genommen werden:

MembershipProvider provider = Membership.Provider; 

Danke für die Informationen, sein viel geholfen. Auch anstatte Einstellung der Standard-Provider mit MembershipProvider provider = Membership.Provider; Sie es mit der Mitgliedschaft Tag einstellen können.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

I "ve auch eine kleine writen, wie man und ein Download zu einem Visual Studio-Projekt und Quelle konfiguriert AspNetActiveDirectoryMembershipProvider zu verwenden.

ASP.NET formularbasierte Authentifizierung - mit AspNetActiveDirectoryMembershipProvider

Ich bin mit Visual Studio 2012 und versuche, so sugested zu tun, aber ein Fehler wird angezeigt:

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

So entdeckte ich, dass ein paar Änderungen sollten dem Standard-Login-Formular auf der VS2012 mit MVC 4 und Entity Framework wie folgt vorgenommen werden:

auf Datei "AccountController.cs"

auf der "public Action Login (LoginModel Modell, string returnUrl)"

Ändern Sie die

    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))

für

    if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))

auf der "public Action LogOff ()"

Ändern Sie die

    WebSecurity.Logout();

für

    FormsAuthentication.SignOut();

und fügen Sie den folgenden: FormsAuthentication.SetAuthCookie (model.UserName, false);

    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
        {

            FormsAuthentication.SetAuthCookie(model.UserName, false);               

            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top