使用当前用户的SharePoint凭据获取Active Directory访问权限

时间:2011-02-23 07:41:28

标签: c# sharepoint active-directory

我正在开发一个SharePoint 2010 Web部件(在C#中),它需要从Active Directory中提取用户数据,但是我无法使用当前SharePoint用户的凭据来通过AD进行身份验证。我正在使用DirectoryEntry类从AD获取数据,当我对某些凭据进行硬编码时它工作正常,但我知道这是不好的做法所以我想避免它。我尝试过几个不同的事情:

new DirectoryEntry("LDAP://" + dc, null, null, AuthenticationTypes.ServerBind | AuthenticationTypes.FastBind);

new DirectoryEntry("LDAP://" + dc, null, null, AuthenticationTypes.Secure);

但他们都只是抛出异常。我真的不知道这些是做什么的,但这是我在网上找到的。

任何有助于我指明正确方向的帮助都将非常感激。

2 个答案:

答案 0 :(得分:2)

你可能遇到了臭名昭着的“双跳”问题。 Sharepoint Server无法自动验证您到另一台服务器,即使在同一个域上也是如此。关于这个问题的更多信息,谷歌“双跳”。

有多种选择可以做你想要的事情:

  1. 您可以使用Sharepoint 2010中的Secure Store Service存储连接到AD的必需用户名/密码,可以是所有Sharepoint用户共享的单个用户名/密码(类似于下面的#2)或用户名/每个Sharepoint用户的密码(类似于下面的#3)。

  2. 您可以设置对AD具有只读权限的AD帐户,然后创建一些Web部件属性以存储用户的用户名和密码。设置属性,以便所有用户共享并由管理员设置。连接到AD时使用存储的用户名/密码。设置password属性,使其从UI端以只写方式显示。

  3. 如果每个用户根据用户在AD中的权限查看不同的AD数据集很重要,那么您可以执行与上述类似的操作,但不要共享用户名/密码属性。

  4. 为您的Sharepoint环境设置Kerberos,从而允许sharepoint Web服务器在您向AD进行身份验证而无需存储您的凭据

  5. 设置AD以允许匿名读取访问(出于安全考虑,可能不是最好的)

答案 1 :(得分:0)

我正在使用此代码与当前用户连接到AD:

    using (DirectoryEntry entry = new DirectoryEntry())
    {
        using (DirectorySearcher searcher = new DirectorySearcher(entry))
        {
            searcher.Filter = "yourSearchQuery";
            searcher.PropertiesToLoad.Add("yourProperty1");
            searcher.PropertiesToLoad.Add("yourProperty2");

            using (SearchResultCollection results = searcher.FindAll())
            {
                foreach (SearchResult result in results)
                {
                    using (DirectoryEntry resultEntry = result.GetDirectoryEntry())
                    {
                        PropertyValueCollection valuesForProperty1 = resultEntry.Properties["yourProperty1"];
                        PropertyValueCollection valuesForProperty2 = resultEntry.Properties["yourProperty2"];

                        // ...
                    }
                }
            }
        }
    }