我目前正在设计一个新的项目我工作的一个会员/档案方案,我希望能得到别人的一些输入。

该项目是一个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);
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top