2012-07-27 3 views
1

현재 Windows 인증을 사용하여 tcp를 통해 연결하는 클라이언트 응용 프로그램과 wcf 서비스가있는 시스템을 검토하고 있습니다.서버의 WindowsIdentity.Current.Name 비교

특정 작업에서 사용자 이름을 개체 속성에 저장하고 서비스로 보내고 클라이언트에서 전달 된 자격 증명과 비교해야합니다. 개체가 추가 처리됩니다.

클라이언트가 최근에 예상 한대로 작동하지 않는다고 최근에 발견되었습니다. 나는이 문제를 조사한 결과, 클라이언트와 서버 측에서 서로 다른 사용자 이름이 사용되는 경우가 있음을 발견했다 (대문자와 소문자의 사용법이 다르다).

나는 실제 fix에 관심이 있지만 가능한 한 string.Equals의 IgnoreCase 옵션을 사용하여 해결 방법을 설치했습니다.

클라이언트에서는 WindowsIdentity.Current.Name을 문자열로 사용하고 서비스 측에서는 ServiceSecurityContext.Current.WindowsIdentity.Name을 문자열로 사용합니다.

이 비교를 수행하는 올바른 방법은 무엇입니까?

답변

0

클라이언트와 서버가 같은 도메인에 있습니까? 그렇다면 User 속성을 사용자 이름 대신 WindowsIdentity 개체에 저장하고 비교하십시오. 이 사용자의 SID (보안 식별자)는 Windows 환경에서 고유 한 숫자 사용자 ID를 단순화합니다.

string storedSid = WindowsIdentity.Current.User.Value; 

당신은 다음이를 사용하여 보안 식별자를 재구성하고, 서비스 측면에서 비교할 수 :

SecurityIdentifier sid = new SecurityIdentifier(storedSid); 
// SecurityIdentifer defines operator == 
bool equalUsers = sid == ServiceSecurityContext.Current.WindowsIdentity.User; 

당신은 Value 속성을 사용하여 SecurityIdentifier 객체의 문자열 표현을 저장할 수 있습니다