2013-08-15 3 views
2

WCF를 처음 사용하며 현재이 문제로 인해 정말로 손실되었습니다 ... 클라이언트에서 제공 한 사용자 이름과 암호를 사용하여 들어오는 요청을 인증하도록 WCF 서비스를 원합니다. 의 Web.config의ClientCredentialsType = Username을 사용하여 wsHttpBinding을 사용하여 인증 할 수 없습니다.

관련 부분은 다음과 같습니다

<endpoint name="wsBinding" 
      address="" 
      binding="wsHttpBinding" 
      contract="ServiceLib.IBooking" 
      bindingConfiguration="myWSSettings" 
      /> 

그리고를 ... 이름이 동일하지 않은 경우

<bindings> 
    <wsHttpBinding> 
    <binding name="myWSSettings"> 
     <security mode="Transport"> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 


<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 

     <serviceCredentials> 
     <userNameAuthentication 
      userNamePasswordValidationMode="Custom" 
      customUserNamePasswordValidatorType= "ServiceLib.MyCustomUserNameValidator, ServiceLib" /> 
     </serviceCredentials> 

    </behavior> 
    </serviceBehaviors> 
</behaviors> 

MyCustomUserNameValidator 단순히 예외를 throw 단지 임시 검사기입니다 암호.

클라이언트 프로그램 (콘솔 응용 프로그램)이 일을한다 :

HTTP 요청은 '협상'클라이언트 인증 방식 무단 있습니다 :

 BookingClient client = new BookingClient("wsBinding"); 
     Passenger passenger = new Passenger(); 

     // ../ 

     client.ClientCredentials.UserName.UserName = "SomeUserName"; 
     client.ClientCredentials.UserName.Password = "WrongPassword"; 

     // ... 
     // ... 

     // NOTE: Following should throw My SecurityException Since username and 
     // Password are not equal 
     bool confirmed = client.IsTicketConfirmed(passenger); 

이것은 내가 얻을 오류입니다. 서버로부터받은 인증 헤더는 'Negotiate, NTLM, Basic'입니다.

정말 도움이 되겠습니까? 나는 이걸 알아 내려고 노력했지만 시간 낭비없이 많은 시간을 보냈다.

감사 하기 Sandeep

참고 : -------- 내 WCF 서비스를 호스팅하는 데에서 GoDaddy를 사용하고

  1. . 보안 모드 = "메시지"는 부분 신뢰 때문에 사용할 수 없습니다.
  2. SSL 인증서가 올바르게 설치되었습니다.

답변

1

당신은 TransportWithMessageCredential에 보안 모드를 변경해야합니다

 <wsHttpBinding> 
      <binding name="SafeServiceConf"> 
       <security mode="TransportWithMessageCredential"> 
        <message clientCredentialType="UserName"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 

당신은 좋은 샘플 here을 발견 할 것이다.

+0

사용자 이름/비밀번호를 어디에서 설정할 수 있습니까? – FrenkyB