2013-10-31 4 views
0

서비스에 액세스하기 위해 사용자 이름과 암호가있는 웹 서비스를 설정하려고합니다. 이 링크를 가이드로 사용하고 있습니다. http://www.codeproject.com/Articles/642997/Generate-username-authentication-based-on-basicHtt인증서없이 basicHttpBinding을 기반으로하는 사용자 인증

나는 아래의 오류를 피할 수있는 영역에 도달했습니다. 아래 설정을 사용하여이 오류 메시지가 나타납니다.

호스트에 구성된 인증 체계 ('익명')는 'BasicHttpBinding'('Basic') 바인딩에 구성된 인증 방식을 허용하지 않습니다. SecurityMode가 전송 또는 TransportCredentialOnly로 설정되었는지 확인하십시오. 또한이 작업은 IIS 관리 도구, ServiceHost.Authentication.AuthenticationSchemes 속성, 요소의 응용 프로그램 구성 파일, 바인딩의 ClientCredentialType 속성을 업데이트하거나 응용 프로그램 구성 파일을 수정하여이 응용 프로그램의 인증 구성표를 변경하여 해결할 수 있습니다 HttpTransportBindingElement의 AuthenticationScheme 속성

내 설정 파일은 WCF 서비스는 윈도우 폰 8 응용 프로그램과 함께 사용할 수

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="customBehavior"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceCredentials> 
     <userNameAuthentication 
      userNamePasswordValidationMode="Custom" 
      customUserNamePasswordValidatorType="Project.Services.MyService, Project.Services"/> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="MyBasicHttpBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Basic" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="customBehavior" name="Project.Services.MyService"> 
    <endpoint address="" 
     binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding" 
     contract="Project.Services.Interfaces.ITechnology"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost/Service/myService.svc" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
    </system.serviceModel> 
    <appSettings> 
    <add key="userName" value="user1"/> 
    <add key="password" value="password"/> 
    </appSettings> 
</configuration> 

입니다. 오류에 대한 여러 기사를 읽었으며 끝점 주소를 ""설정했지만 아무 것도 작동하지 않았습니다. 나는 내가 잘못된 트랙에 나를 넣을 수있는 너무 많은 변경을하고 있다고 생각하면서 위의 설정으로 돌아 가야했습니다.

서비스는 내 로컬 IIS (Win 8 64 비트 프로 + 모든 업데이트)에서 호스팅됩니다.

아무도 도와 줄 수 있습니까?

+0

userName 인증으로 BasicHttpBinding을 사용할 때 WCF의 기본 규칙은 http 전송이 일반 텍스트이므로 사용자 이름/pwd를 http로 전달할 수 없다는 것입니다. 따라서 https로 만드는 전송 보안을 활성화해야합니다. – Rajesh

+0

내가 귀하의 의견에 동의하지만 원래 Windows Phone 8은 https 사용자 이름 인증을 지원하지 않습니다. 따라서 사용자/암호로 basicHttpBinding을 사용해야합니다. 이것이 틀린 지 알고 싶습니다. – Computer

답변

1

오류에 따르면 서비스에서 "기본 인증"을 허용하도록 IIS를 설정해야합니다.

IIS 관리 콘솔에서 인증 탭을 선택하고 "기본 인증"을 허용으로 설정하십시오. 또한 "익명 인증"을 비활성화하십시오.

"기본 인증"이 없으면 IIS에이 역할을 추가해야합니다. 수행 방법을 확인하십시오. here.

+0

Miguel에게 감사드립니다. 구성 파일을 변경했습니다 (원래 게시물을 참조하십시오). 브라우저를 통해 서비스에 연결하면 사용자 이름과 암호를 묻는 메시지가 표시되지만 user1/password를 입력하면 서비스 페이지로 이동하지 않습니다. 그러나 익명 인증을 허용하는 것은 달성하려는 목표를 저지합니다. 왜 그럴까요? – Computer

+0

아마 IIS에서 직접 로컬 사용자를 사용하려고 시도하는 대신 서비스 인증을 사용하면 오류가 구성 또는 코드에 있는지 확인할 수 있습니다. 이렇게하면 서비스가 배포 된 폴더의 사용자에게 읽기 권한이 부여됩니다. – ByteArtisan

+0

나는 그것을 줄 것이다. 그래서 내 파일에 사용자/암호 구성이 필요합니까? 마지막으로 System.IdentityModel.Selectors.UserNamePasswordValidator – Computer