窗体身份验证和Active Directory(Forms Authentication and A

2019-10-29 17:39发布

目前,我有使用窗体身份验证的几个项目,我能够让用户与他们的AD帐户登录。 路上,我一直在做的,是很容易的。

web.config中

//first I set up the connection string to the active directory account
<connectionStrings>
    <add name="ADService" connectionString="LDAP://ourDomainController/OU=stores,DC=DOMAIN,DC=net" />
<ConnectionStrings>

//Then I add the membership provider for active directory
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <clear />
        <!--Membership provider for Active Directory-->
        <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,  System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADService" attributeMapUsername="sAMAccountName" />
      </providers>
</membership>

我无法登录使用Active Directory用户名和密码。 但是,我不能拒绝访问该网站,以特定群体的某些部分。 这种方式搜索整个活动目录,如果你是它的一部分,你可以登录,在一个应用程序中,我会插入到用户的SQL表,然后授权用户访问的网站等,如果他们的一部分SQL表的。 这种运作良好,但是,应用程序正在迅速许多用户增长,我想利用Active Directory中的优势群体。 我花了几天的研究和实验,但我没有找到任何解决方案。 许多人使用Windows身份验证,但它不太悦目,并且在这个阶段,很可能只是吓坏了最终用户的几个星期。 (应用程序在13家不同的商店价差)我也看了这个文章 ......并试图在测试应用程序这一解决方案,但没有任何运气。 不断收到一个错误说“对象引用不设置到对象的实例”自定义ADRoleProvider。

var root = new DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString, ConnectionUsername, ConnectionPassword);

我只是想知道如果任何人的方式做正确这或以不同的方式来做到这一点知道。 任何的建议是有帮助的! 谢谢!

Answer 1:

AD的角色提供理想的方式,你可以写你自己的角色提供以下链接我解决您的问题, 角色提供链接



Answer 2:

我已经解决了这个问题。 我使用的是在我的问题中提供的链接和被卡姆利什提供的链接。 这个问题是我.. GetRolesForUser。 我不得不使用此代码解决这个问题..

public override string[] GetRolesForUser(string username)
    {
        List<string> allRoles = new List<string>();
        var ctx = new PrincipalContext(ContextType.Domain);
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username);
        if (user != null)
        {
            var groups = user.GetGroups();
            allRoles.AddRange(groups.Select(x => x.Name));
        }

        return allRoles.ToArray();
    }

我不再获得一个NullReferenceException这个发现,使用目前的角色。请确保您使用的是组在活动目录中。 希望这一段时间可以节省的人。



文章来源: Forms Authentication and Active Directory