2011-02-23 8 views
1

Active Directory에서 사용자 데이터를 가져와야하지만 현재 SharePoint 사용자의 자격 증명을 사용하여 인증하는 데 문제가있는 SharePoint 2010 웹 파트 (C#에서)를 개발 중입니다. 광고. DirectoryEntry 클래스를 사용하여 AD에서 데이터를 가져오고 일부 자격 증명을 하드 코딩 할 때 제대로 작동하지만 나쁜 방법이므로 피하고 싶습니다. 내가 좋아하는 다른 몇 가지 시도했다 :현재 사용자의 SharePoint 자격 증명을 사용하여 Active Directory에 액세스하기

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

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

을하지만 그들은 모두는 예외를 throw합니다. 나는 이것이 실제로 무엇을하는지 모르지만 그것은 내가 온라인에서 찾을 수 있었던 것이다.

올바른 방향으로 나를 가리킬 수있는 모든 도움을 주시면 감사하겠습니다.

+0

프로필 서비스가 구성되어 있습니까? 이를 사용하여 SharePoint 개체 모델을 사용하여 사용자 데이터를 가져올 수 있습니다. – ukhardy

답변

2

을 당신은 아마 악명 높은 '이중 홉'문제로 실행 중입니다. Sharepoint Server는 동일한 도메인에서도 다른 서버로 자동으로 인증 할 수 없습니다. 문제에 대한 자세한 정보는 Google 'double hop'을 참조하십시오.

  1. 당신은 하나 하나의 사용자 이름/비밀번호 공유, AD에 연결하는 데 필요한 사용자 이름/암호를 저장하는 셰어 포인트 2010에서 보안 저장소 서비스를 사용할 수 있습니다

    당신이 원하는 일을위한 몇 가지 옵션이 있습니다 모든 Sharepoint 사용자 (아래 # 2와 유사) 또는 각 Sharepoint 사용자의 사용자 이름/암호 (아래 # 3과 유사).

  2. AD에 대한 읽기 전용 권한이있는 AD 계정을 설정 한 다음 사용자의 사용자 이름과 암호를 저장할 일부 웹 파트 속성을 만들 수 있습니다. 속성을 설정하여 모든 사용자가 공유하고 관리자가 설정합니다. AD에 연결할 때 저장된 사용자 이름/암호를 사용하십시오. UI 측면에서 쓰기 전용이되도록 password 속성을 설정하십시오.

  3. 각 사용자가 AD의 사용자 권한을 기반으로 다른 AD 데이터 집합을 보는 것이 중요 할 경우 위와 비슷한 작업을 수행 할 수 있지만 사용자 이름/암호 속성을 공유하지 마십시오.

  4. 아마 (익명 액세스를 읽을 수 있도록 자격 증명

  5. 설정 AD를 저장하지 않고, 따라서 SharePoint 웹 서버가 AD로로 인증 할 수 있도록 SharePoint 환경을 위해 최선을 Kerberos를하지 설정 보안상의 이유로)

+0

이중 홉 문제에 대해봤을 때 문제가되는 것 같았습니다. 내 테스트 서버가 위임에 대해 신뢰할 수없는 것으로 보였지만 이미 설정 한 이후로 Kerberos를 조사했습니다. 그것에 대해 우리의 시스템 관리자에게 채팅을 할거야. 감사! – null0pointer

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

         // ... 
        } 
       } 
      } 
     } 
    } 
관련 문제