【问题标题】:AD and Forms AuthenticationAD 和表单身份验证
【发布时间】:2012-05-21 21:20:19
【问题描述】:

我正在尝试允许用户使用表单身份验证或他们的 AD 帐户登录,但遇到了一些问题。我已登录 AD 帐户,但 Page.User.Identity.Name 为空白。我的 web.config 中有这个:

<connectionStrings>
    <add name="ADConnectionString" connectionString="LDAP://full.domain.address:389/DC=mydomain,DC=blah,DC=uk"/>
    <add name="myapp" connectionString="Data Source=myserver;Initial Catalog=myapp;User ID=myapp;Password=myapp" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="129600" name="CookieMonster" protection="All" slidingExpiration="true" cookieless="UseCookies"/>
    </authentication>
    <membership defaultProvider="ADMembershipProvider">
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
             connectionStringName="myapp" enablePasswordRetrieval="false" enablePasswordReset="true" 
             requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" 
             passwordAttemptWindow="10" applicationName="/"/>
        <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
             connectionStringName="ADConnectionString"/>
      </providers>
    </membership>
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="myapp" applicationName="/"/>
      </providers>
    </profile>

我需要做其他事情才能让它工作吗?我尝试使用我的域帐户和 domain\myaccount 登录,但无济于事。

当我尝试var u = Membership.GetUser("mydomain\\myuser"); 时出现错误:映射到“userPrincipalName”时,用户名不得包含“\”。

【问题讨论】:

    标签: asp.net webforms active-directory forms-authentication


    【解决方案1】:

    AD userPrincipalName 可能类似于 user@full.domain.address。尝试为attributeMapUsername 使用sAMAccountName 值:

    <add name="ADMembershipProvider" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
      connectionStringName="ADConnectionString"
      attributeMapUsername="sAMAccountName"/>
    

    如果无法连接,可能需要添加connectionUsernameconnectionUserPassword 属性(查看MSDN 文档)。

    【讨论】:

    • 这不是我在阅读的任何文章中注意到的属性。谢谢。
    【解决方案2】:

    “sAMAccountName”不包括域。要解决您的问题,只需从您的用户名中删除符合条件的域即可:

    而不是var u = Membership.GetUser("mydomain\\myuser");

    使用var u = Membership.GetUser("myuser");

    这是因为您在连接字符串中指定了域,通过连接到特定的活动目录隐式指定。

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多