Fournisseur et fournisseur SQL Profil de membre Active Directory ASP.NET
-
23-08-2019 - |
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.
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.
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);
}