ASP.NET的Active Directory成员资格提供与SQL资料提供
-
23-08-2019 - |
题
我目前正在设计一个新的项目我工作的一个会员/档案方案,我希望能得到别人的一些输入。
该项目是一个ASP.NET Web应用程序,并且由于短的时间内,我想使用的任何和所有在建,我可以.NET Framework组件。该网站可能会招待<5000个用户。每个用户将有其中的自定义设置和对象将访问之间被持久的轮廓。
我需要使用现有的Active Directory进行身份验证。由于AD架构不能扩展到举行新的领域,我需要持有不同的数据存储用户设置和对象。我也一直告诉亚当很可能不是一个可行的解决方案。
我希望使用Active Directory成员资格提供我的身份验证方案和SQL配置文件提供的用户配置文件数据存储。我不希望建立一个自定义配置文件提供者,但我不认为这构成太大的问题,如果需要的话。
我想知道是否这甚至可能的解决方案,并且如果是这样,一直没有人有该方法的任何运气。
任何意见,将不胜感激。
感谢。
解决方案
首先 - 我从来没有这样做我自己。
有对ASP.NET 2.0的成员,在的 4名专家从罗拉。
据我了解,你应该能够配置此行为您是通过使用基本上是你的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>
我认为这应该工作: - )
其他提示
在除了这种由Marc作为回答:
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.3600, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
您可能还需要添加
connectionStringName="ADService",
attributeMapUsername="sAMAccountName"
与corresponnding连接字符串
<connectionStrings>
<add name="ADService" connectionString="LDAP://ServerIP" />
</connectionStrings>
如果您使用的是.NET 4.0,那么你将需要更换
Version=2.0.3600
与
Version=4.0.0.0
因此,最后,
<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>
和,因为它被设为默认值,它可以如引用:
MembershipProvider provider = Membership.Provider;
感谢您的信息,其很多的帮助。此外,而不是MembershipProvider provider = Membership.Provider;
设置默认提供您可以在会员标签设置。
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
我“以前也writen小如何和下载到Visual Studio的项目和源配置为使用AspNetActiveDirectoryMembershipProvider。
ASP.NET基于表单的身份验证 - 使用AspNetActiveDirectoryMembershipProvider
我使用的Visual Studio 2012和试图做如sugested,但示出了一个错误:
To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".
所以,我发现如下一些变化应做默认的登录表单与MVC 4和实体框架的VS2012:
在文件 “AccountController.cs”
对 “公共的ActionResult登录(LoginModel模型,串RETURNURL)”
更改
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
的
if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
对 “公共的ActionResult注销等()”
更改
WebSecurity.Logout();
的
FormsAuthentication.SignOut();
和添加以下内容: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);
}