2010-12-10 3 views
0

원격 관리자가 로컬 또는 도메인 자격 증명을 사용하여 WCF TCP 바인딩을 통해 내 Windows 서비스를 제어하게 할 수 있습니다. 이렇게하려면 원격 사용자를 관리자로 인증해야합니다. 주 사용자/역할을 확인할 수 있지만 원격 사용자에게 올바른 사용자 정보/토큰을 묻는 방법을 모르겠습니다.제한된 원격 WCF 서비스 : Windows 인증 프롬프트

이것은 내 이전 질문 Restricting WCF TCP endpoint to Administrators에 관한 것입니다. 액세스 거부 결과가 그래서 반품 된 경우 나 Windows 인증을위한 원격 사용자에게 메시지를 표시하려면 어떻게

if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators")) 
    return MethodResult.AccessDenied; 
// haven't tested if it's the service thread or the remote user yet. 

대신 내 제한된 서비스 방법에 [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]을 추가하고 SecurityException 잡기, 내가 그것을 확인할 수 있습니다 보인다 다른 교장으로 연결을 다시 시작 하시겠습니까?

물론 원격 사용자의 클라이언트 응용 프로그램에서 변경해야합니다. 아마도 더 깨끗한 WCF 방법이있을 것입니다.


편집 : "그물 가장"을 검색는 CodeProject의에 this를 알려준. 볼 기회가 없었지만, 이것이 갈 길일 수 있습니다.

답변

1

WCF 호출로 사용자의 자격 증명을 전달해야합니다. 일반적으로 클라이언트 응용 프로그램은 현재 실행중인 사용자의 자격 증명을 "캡처"합니다. 또는 사용자 이름과 암호를 명시 적으로 지정할 수 있습니다. 원할 경우 사용자에게 다른 자격 증명 집합을 요구할 수 있습니다.

어느 쪽이든, 클라이언트 응용 프로그램은 사용자에게 프롬프트를 표시해야합니다. WCF 호출은 인증 실패시 오류 (코드 또는 예외)를 반환해야하며 클라이언트는 해당 반환 값을 캡처하여 사용자에게 프롬프트를 표시하고 새 자격 증명으로 다시 시도해야합니다. WCF만으로는 사용자에게 메시지를 표시 할 수 없습니다. 여기

이 통과 자격 증명의 다양한 방법에 관한 기사입니다 :
여기 http://blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

+0

감사합니다. [이 질문] (http://stackoverflow.com/questions/1596161/how-to-show-authentication-dialog-in-c-net-3-5-sp1)는 오래된 표정을 가지고 있지만 기본 프롬프트를 제공합니다. –

0

IIS에서이 호스트가 호스팅된다고 가정하면 IIS 관리자에서 익명 인증을 해제해야합니다. 이렇게하면 사용자가 Windows 계정을 사용하여 시스템에 로그인해야합니다. ASP.NET 가장을 사용하도록 설정해야 할 수도 있습니다.

+0

없음을 사용하여 표준 Windows 대화 상자를 사용하여 사용자에게 메시지를 표시 할 수있는 방법, 그것은 Windows 서비스와 클라이언트의 Windows Forms 응용 프로그램입니다. 따라서 IIS가 없습니다. –