Question

Je suis en train de concevoir un système d'adhésion / profil pour un nouveau projet sur lequel je travaille et j'espérais obtenir des commentaires des autres.

Le projet est une application Web ASP.NET et en raison du court laps de temps, je suis en train d'utiliser tout et tous construits dans les composants .NET Framework que je peux. Le site sera probablement divertir <5000 utilisateurs. Chaque utilisateur aura un profil où les paramètres personnalisés et les objets seront persistaient entre les visites.

Je suis obligé d'utiliser un Active Directory existant pour l'authentification. Étant donné que le schéma AD ne peut pas être étendu à tenir de nouveaux champs, je suis obligé de tenir les paramètres utilisateur et les objets dans un magasin de données différentes. On m'a aussi dit à Adam est probablement pas une solution possible.

J'espérais utiliser le fournisseur d'appartenances Active Directory pour mon système d'authentification et le fournisseur de profils SQL en tant que profil de l'utilisateur magasin de données. Je préférerais ne pas construire un fournisseur de profil personnalisé, mais je ne vois pas ce qui pose un gros problème en cas de besoin.

Je me demandais si cela est encore une solution possible, et si oui, quelqu'un at-il eu de chance avec cette approche.

Les commentaires seraient grandement appréciés.

Merci.

Était-ce utile?

La solution

Tout d'abord -. Je ne l'ai jamais fait moi-même

Il y a une série vraiment excellent (14 pièces !!) sur l'ensemble du sujet de l'appartenance ASP.NET 2.0, les rôles et les systèmes de fournisseur de profils par Scott Mitchell à 4 gars de Rolla .

D'après ma compréhension, vous devriez être en mesure de configurer ce comportement que vous recherchez en utilisant essentiellement ces deux sections dans votre 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>

Je pense que cela devrait fonctionner: -)

Autres conseils

En plus de cela comme répondu par Marc:

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

vous pourriez aussi avoir besoin d'ajouter

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

avec chaîne de connexion corresponnding

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

Si vous utilisez .net 4.0, vous devrez remplacer

Version=2.0.3600 

avec

Version=4.0.0.0

Enfin,

<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>

et comme il est défini par défaut, il peut être référencé comme:

MembershipProvider provider = Membership.Provider; 

Merci pour l'information, l'a beaucoup aidé. En outre, plutôt que de définir le fournisseur par défaut avec MembershipProvider provider = Membership.Provider; vous pouvez définir avec la balise d'adhésion.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

I "ai aussi écrit un petit comment et un téléchargement à un projet Visual Studio et Source configuré pour utiliser AspNetActiveDirectoryMembershipProvider.

ASP.NET basée sur les formulaires d'authentification - en utilisant AspNetActiveDirectoryMembershipProvider

J'utilise Visual Studio 2012 et essayé de faire comme sugested, mais une erreur est indiquée:

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

Alors j'ai découvert que quelques modifications doivent être faites au formulaire de connexion par défaut sur le VS2012 avec MVC 4 et Entity Framework comme suit:

sur le fichier "AccountController.cs"

sur le "public ActionResult Connexion (modèle LoginModel, chaîne returnUrl)"

Changer le

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

pour

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

sur le "public ActionResult LogOff ()"

Changer le

    WebSecurity.Logout();

pour

    FormsAuthentication.SignOut();

et ajouter ce qui suit: 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);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top