2010-05-05 4 views
0

WCF 서비스의 구성을 감사하는 유틸리티를 작성하고 있습니다. 클라이언트에서 자격 증명을 제대로 전달하려면 WCF 서비스를 통해 SQL 백 엔드로 돌아가서 서비스 실행에 사용 된 도메인 계정을 "위임에이 사용자 신뢰"(속성 -> "위임") 설정으로 Active Directory에 구성해야합니다 " 탭).활성 디렉토리 사용자 계정의 위임 등록 정보는 어떻게 쿼리합니까?

C#을 사용하면 Active Directory에서이 탭의 설정에 액세스하는 방법은 무엇입니까? 지난 5 시간 동안 웹에서이를 추적하려고했는데 찾지 못했습니다. 여기

내가 지금까지 한 일이다 :

using (Domain domain = Domain.GetCurrentDomain()) 

{ Console.WriteLine (domain.Name를);

// get domain "dev" from MSSQLSERVER service account 
DirectoryEntry ouDn = new DirectoryEntry("LDAP://CN=Users,dc=dev,dc=mydomain,dc=lcl"); 
DirectorySearcher search = new DirectorySearcher(ouDn); 

// get sAMAccountName "dev.services" from MSSQLSERVER service account 
search.Filter = "(sAMAccountName=dev.services)"; 
search.PropertiesToLoad.Add("displayName"); 
search.PropertiesToLoad.Add("userAccountControl"); 

SearchResult result = search.FindOne(); 
if (result != null) 
{ 
    Console.WriteLine(result.Properties["displayName"][0]); 
    DirectoryEntry entry = result.GetDirectoryEntry(); 

    int userAccountControlFlags = (int)entry.Properties["userAccountControl"].Value; 
    if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_FOR_DELEGATION) 
     Console.WriteLine("TRUSTED_FOR_DELEGATION"); 
    else if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION) 
     Console.WriteLine("TRUSTED_TO_AUTH_FOR_DELEGATION"); 
    else if ((userAccountControlFlags & (int)UserAccountControl.NOT_DELEGATED) == (int)UserAccountControl.NOT_DELEGATED) 
     Console.WriteLine("NOT_DELEGATED"); 

    foreach (PropertyValueCollection pvc in entry.Properties) 
    { 
     Console.WriteLine(pvc.PropertyName); 
     for (int i = 0; i < pvc.Count; i++) 
     { 
      Console.WriteLine("\t{0}", pvc[i]); 
     } 
    } 

} 

}

은 "userAccountControl의"올바른 부동산 될 것 같지 않습니다. 나는 그것이 "Account"탭의 "Account Options"섹션에 묶여 있다고 생각하는데, 이것은 우리가 찾고있는 것이 아니지만 지금까지 가장 가까이에 있습니다.

이 모든 것에 대한 정당한 근거는 다음과 같습니다. QA 또는 생산 환경에서 서비스를 설정할 수있는 권한이 없으므로 필자의 서면 지침 (일부만 악독 되기만 함)과 함께 서비스를 감사 할 도구를 만들고 있습니다. setup (WCF 및 SQL)을 사용하여 설정이 올바른지 확인하십시오. 이렇게하면 서비스를 배포하는 사람이이 유틸리티를 실행하고 모든 것이 올바르게 설정되었는지 확인할 수 있습니다. 이로 인해 시간이 많이 걸리고 배포 중 다운 타임이 줄어 듭니다.

답변

1

좋아, 나는 틀렸다. 처음으로 userAccountControl을 실행했을 때 TRUSTED_FOR_DELEGATION이 설정되지 않았습니다. 캐싱 문제인지 아닌지는 알 수 없습니다. 내가 추가했습니다 :

entry.RefreshCache (새 문자열 [] { "userAccountControl"});

값을 캐시하지 않았는지 확인하십시오. 이 방법이 효과가 있는지 없는지는 모르겠지만, 경우에 맞게 추가했습니다.

1

아마 너무 늦었 겠지만, 어 ... 그것을 발견 했으므로 나는 그것을 나눌 것이라고 생각했습니다.

해당 속성은 "msDS-AllowedToDelegateTo"라고하며 구성된 SPN 값이있는 계정에만 표시되지만 위임을 위해 개체가 신뢰할 수있는 모든 서비스의 포괄적 인 목록을 제공합니다.

희망을 가지고 다른 누군가가 몇 시간 동안 kerberos 사양을 읽지 않아도됩니다.

관련 문제