广告和表单身份验证

时间:2012-05-14 11:33:29

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

我正在尝试允许用户使用表单身份验证或其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>

我是否需要做其他事情才能让它发挥作用?我尝试使用我的域帐户和域\ myaccount登录无效。

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

2 个答案:

答案 0 :(得分:0)

AD userPrincipalName可能类似于user@full.domain.address。尝试使用sAMAccountName的{​​{1}}值:

attributeMapUsername

如果您无法连接,则可能需要添加<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"/> connectionUsername属性(请查看MSDN文档)。

答案 1 :(得分:0)

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

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

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

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