2011-05-06 5 views
2

나는 두 클라이언트에 의해 소비되고있는 WCF 서비스가 있습니다통합 Windows 인증을 브라우저에서 사용할 수 있습니까?

  1. 실버 라이트 클라이언트; 이것은 IWA에서 잘 작동합니다.

내가 데스크톱 응용 프로그램에서 IWA를 사용하려면 데스크톱 응용 프로그램,하지만 그게 가능할까요? Negotiate 또는 NTLM을 원할 때 익명으로 전달한다는 HTTP 오류 메시지가 나타납니다. 꽤 명백하게 들리지만 어떻게 해결할 수 있습니까? 문제를 진단하는 데 도움이 여기에서 보는 많은이없는 동안

+0

코드를 실수로 게시하면됩니다. 확실히 가능합니다. –

+0

몇 가지 출처에서 서버를 Windows 인증으로 변경 한 후 서비스 참조를 재생성해야하며 그렇게하면 문제가 해결 될 것 같아서 설득력을 얻지 못합니다. 또한 설정할 수있는 WCF 클라이언트 개체의 [ClientCredentials 속성] (http://msdn.microsoft.com/en-us/library/ms553830.aspx)이 있습니다. – Rup

+0

@Rup은 IIS의 웹 사이트/응용 프로그램을 Windows 통합 인증 만 수락하도록 설정해야합니다. 이 [link] (http://forums.asp.net/t/1646707.aspx/1)와 같은 서비스 및 클라이언트 구성 MSDN 포럼 [link] (http://social.msdn.microsoft. com/Forums/ko-ko/wcf/thread/0aac0110-187e-4a00-a597-f15b768cf16c /)는 데스크톱 응용 프로그램에서 Windows 자격 증명을 보내는 클라이언트 코드를 보여줍니다. –

답변

4

이 작업을 수행 할 수 있습니다. 기본적으로 web.config 및 클라이언트 구성 파일을 데스크탑 응용 프로그램의 app.config 파일에 혼합해야합니다. 바인딩 것을 사용 후

<system.web> 
    <authentication mode="Windows"/> 
    </system.web> 

<bindings> 
     <basicHttpBinding> 
     <binding name="winAuthenticationBinding"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

(분명히 <system.serviceModel> 태그 안에 넣어

을 그리고 :.

그래서 당신은 Web.config의 라인을 추가해야 할 것 일반적으로 클라이언트 설정 파일에 입력하는 클라이언트 엔드 포인트.

+0

OOB 인 경우 Silverlight 응용 프로그램 용입니까? 나는이 문제를 겪고 있으며 OOB를 실행할 때입니다. –

+0

@RichardB 예, 이것은 OOB를위한 것입니다. 나는 전체 해결책을 특별히 기억하지는 않지만 확실히 가능하다. – Harry

+0

확인. "컴퓨터에서 작동하지만 Windows 인증에 대한 배포 문제가 아님 ... 빠른 Windows 양식 응용 프로그램을 빌드하고"이 서비스에 대한 보안 설정에 '익명'인증이 필요하지만 이 서비스를 호스팅하는 IIS 응용 프로그램에 사용할 수 없습니다. " –

0

, 나는 당신이이 자원을 통해보고 데스크톱 응용 프로그램이없는 것을 볼 제안 : http://msdn.microsoft.com/en-us/library/bb629363.aspx

그것은 내 가정이기 때문에 그 Silverlight 응용 프로그램이 서버 쪽에서 실행되는 경우 문제는 서버 네트워크 내부가 아닌 네트워크를 통해 인증을 통과하는 것입니다. 다른 가능성은 데스크톱 응용 프로그램을 위해 가져 오지 않은 Silverlight 응용 프로그램에 대한 사용자 지정 구성이 있다는 것입니다. 예를 들어, 설정 파일 내의 인증 메커니즘을 WSDL과 함께 제공되는 기본값에서 다른 것으로 변경할 수 있습니다. 어쩌면 실버 라이트 애플리케이션 개발자가 그랬던 것처럼 그저 모방 할 필요가있을 것입니다. 데스크톱 응용 프로그램이 시작되면

0

, 당신은 Program.cs에서 가장 먼저 할 일은 이것이다 : 기본 CurrentPrincipal으로

System.Threading.Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()); 

가 인증되지 않은 GenericPrincipal입니다. 또한 스핀 업하는 모든 스레드에서 해당 코드를 실행해야합니다.

또한 서비스에 연결되도록 Wcf를 구성해야합니다 (Silverlight 구성 방법과 비슷 함).

관련 문제