2011-02-23 54 views
1

我正在开发一个SharePoint 2010的Web部件(在C#),这需要从活动目录中获取用户数据,但我使用的是当前SharePoint用户的凭据进行身份验证有麻烦广告。我使用DirectoryEntry类从AD获取数据,当我对某些凭证进行硬编码时,它工作正常,但我知道这是不好的做法,所以我想避免它。我试着像情侣不同的东西:使用当前用户的SharePoint凭证来获得Active Directory访问

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

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

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

任何帮助,可以指向我在正确的方向将不胜感激。

+0

你已经配置档案服务?您可以利用它来使用SharePoint对象模型获取用户数据。 – ukhardy 2011-02-23 12:10:04

回答

2

您可能已经到了臭名昭著的“双跳”的问题。即使在同一个域上,Sharepoint Server也不能自动向其他服务器进行身份验证。谷歌'双跳'的更多信息的问题。

有几个选项做你想要什么:

  1. 您可以使用2010 SharePoint中的安全存储服务来存储所需的用户名/密码用于连接到AD,一个单一的用户名/密码共享所有Sharepoint用户(类似于下面的#2)或每个Sharepoint用户的用户名/密码(类似于下面的#3)。

  2. 你可以设置一个具有只读权限广告的广告帐户,再创建一些Web部件属性存储用户的用户名和密码。设置属性,以便它们由所有用户共享并由管理员设置。连接到AD时使用存储的用户名/密码。因此,它是只写从UI界面侧设置的密码属性。

  3. 如果它是重要的是每个用户看到不同的基础上,用户在AD权限AD数据,那么你可以做类似上面的东西,但不要使共享的用户名/密码属性。

  4. 设置Kerberos为您的SharePoint环境,从而使的SharePoint Web服务器为您验证到AD而不必存储凭据

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

+0

在双跳问题上做了一些搜索,肯定听起来像这个问题。由于我们已经设置了Kerberos,所以考虑到这一点,尽管看起来我的测试服务器不受委派。去和我们的系统管理员聊聊吧。谢谢! – null0pointer 2011-03-02 01:55:33

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"]; 

         // ... 
        } 
       } 
      } 
     } 
    } 
相关问题