2011-01-24 2 views
6

내가 개발 한 asmx 웹 서비스에 대한 인증 오류가 발생했습니다. 웹 서비스 자체에는 사용자 자격 증명이 필요하지 않지만 익명 액세스를 허용하도록 구성하려고했지만 웹 서비스가이를 구현하도록 구성되어 있습니다.익명 액세스를 허용하는 ASMX 웹 서비스

나는 해당 웹 사이트를 설정했습니다. IIS에서 익명 액세스를 허용하려면 다음 web.config

Screenshot of IIS setting

또한 내가 포함 한 다음 줄 :

<configuration> 
    ... 
    <system.web> 
     ... 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     ... 
    </system.web> 
    ... 
</configuration> 

는 전화를 시도 테스트 클라이언트에서 웹 서비스는,이 오류 메시지가 :

HTTP 요청은 클라이언트 인증 방식 '익명'무단입니다. 서버에서받은 인증 헤더 은 'NTLM'입니다.

string message = new ServiceReference1.Service1SoapClient().HelloWorld(); 

그리고 웹 서비스 코드 :

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 
} 

몇 가지 중요한 점 :

웹 서비스를 호출하는 코드의 라인은 다음과 같다 NTLM을 사용하여 클라이언트를 인증하려고 시도하면 제대로 작동합니다.

  • 인증하지 않도록 클라이언트를 설정하면 위의 메시지와 함께 실패합니다.
  • 웹 브라우저를 사용하여 웹 서비스에 액세스하려고하면 예상되는 웹 서비스 설명서 페이지 대신 FORBIDDEN 오류 메시지가 표시됩니다.
  • Visual Studio에서 웹 서비스를 실행하고 해당 서비스 (로컬 호스트 ...)에 액세스하도록 클라이언트를 구성하면 제대로 작동합니다.
  • 나는 또한 시도조차 자세한 내용은

  • 아래를 참조하고 웹 서비스를 가리키는 위치 태그 내에 인증 태그를 넣어 :

    <location path="Service1.asmx"> 
        <system.web> 
         <authorization> 
          <allow users="*" /> 
         </authorization> 
        </system.web> 
    </location> 
    

    이것은 어떻게 클라이언트 구성 (app.config)은 다음과 같습니다 (위에서 언급 한 바와 같이 웹 브라우저를 사용하여 서비스에 액세스 할 수 없으므로 관련 클라이언트 구성을 고려하지 않음).

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <system.serviceModel> 
         <bindings> 
          <basicHttpBinding> 
           <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00" 
            receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
            useDefaultWebProxy="true"> 
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
             maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
            <security mode="None"> 
             <transport clientCredentialType="None" proxyCredentialType="None" 
              realm="" /> 
             <message clientCredentialType="UserName" algorithmSuite="Default" /> 
            </security> 
           </binding> 
          </basicHttpBinding> 
         </bindings> 
         <client> 
          <endpoint address="http://name.of.the.server.example.org/Service1.asmx" 
           binding="basicHttpBinding" bindingConfiguration="Service1Soap" 
           contract="ServiceReference1.Service1Soap" name="Service1Soap" /> 
         </client> 
        </system.serviceModel> 
    </configuration> 
    

    어떤 아이디어?


    업데이트 : 나는 다음과 같은 파일을 찾을 수 :

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles\web.config 
    

    는 사용자 정의 웹 응용 프로그램에 어떤 관련이 있는가, 그리고 네, 내 자신의 web.config의 설정이 우선하지 않는 경우 그 파일의 설정? 해당 파일의

    내용 : 다른 파일이

    <configuration> 
        <system.web> 
         <membership> 
          <providers> 
           <add name="WebAdminMembershipProvider" type="System.Web.Administration.WebAdminMembershipProvider" /> 
          </providers> 
         </membership> 
         <httpModules> 
          <add name="WebAdminModule" type="System.Web.Administration.WebAdminModule"/> 
         </httpModules> 
         <authentication mode="Windows"/> 
         <authorization> 
          <deny users="?"/> 
         </authorization> 
         <identity impersonate="true"/> 
         <trust level="Full"/> 
         <pages validateRequest="true"/> 
         <globalization uiCulture="auto:en-US" /> 
        </system.web> 
    </configuration> 
    

    비록 :

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\web.config 
    

    그리고 나는 오히려이 하나가 시스템 전체의 web.config 파일 생각합니다.

    <system.web> 
        <authorization> 
         <allow users="*"/> 
        </authorization> 
    
    +0

    몇 가지 ... 클라이언트 측 서비스 구성과 관련된 테스트 클라이언트에서 web.config 섹션을 게시 할 수 있습니까? 또한 서비스 측면에서 메서드를 정적으로 만들려고 했습니까? 나는 다른 컨텍스트 (예 : 일반 aspx 페이지)에서 WebMethods가 정적이어야한다는 것을 알고 있지만 asmx에 대해서는 기억이 안납니다. – Andrew

    +0

    @Andrew : 귀하의 의견에 감사드립니다. 내 질문에 몇 가지 세부 정보를 추가했습니다. 또한 웹 브라우저를 통해 액세스를 시도 했으므로 app.config가 적절하지 않을 수도 있습니다. 나는 여전히 참조 용으로 추가했다. 당신은 결코 알지 못합니다 ... – chiccodoro

    +0

    익명 액세스를 위해 사용중인 사용자가 귀하의 폴더에 대한 읽기 권한을 가지고 있습니까? –

    답변

    0

    익명 액세스에 사용하도록 구성된 인터넷 게스트 계정에 문제가있는 것 같습니다. 해당 계정을 다른 계정으로 설정하면 정상적으로 작동합니다.

    0

    예, 서버가 귀하의 사이트에 대한 익명 액세스를 허용하도록 구성 할 필요가 : 사실 에서이 파일은 모든 사용자에게 액세스 할 수 있습니다.
    <allow users="*" />은 .net 부분에서해야 할 일 전부입니다.

    +0

    이제 익명 액세스를 시도하고 설정했습니다 (위의 업데이트 참조). 여전히 작동하지 않습니다. – chiccodoro

    +0

    안녕하세요 SWeko, 제 (업데이트 된) 질문에 대해 다시 살펴 보시겠습니까? 나는 정말로 잃어버린 느낌. ... – chiccodoro

    0

    .Net. 이미 완료 한대로 모든 사용자를 허용해야합니다. 익명 액세스를 허용하도록 IIS를 구성해야합니다. 나머지 페이지를 어떻게 인증합니까?

    +0

    이제 익명 액세스를 시도하고 설정했다 (위의 업데이트 참조). 여전히 작동하지 않습니다. – chiccodoro

    +0

    안녕하세요. Smelch, 다시 (업데이트 된) 질문을 읽은 후 더 이상 아이디어가 있습니까? – chiccodoro

    1

    응용 프로그램에 구성 설정에 기여하는 상위 수준의 web.config 및/또는 machine.config를 확인 했습니까?

    +0

    내가 얼마나 관련성이 있는지 모르겠지만 흥미로운 것을 발견했습니다. 업데이트 된 질문보기 – chiccodoro

    6

    *은 인증 된 사용자를 의미하므로 ?을 대신 사용해야합니다. 전체 웹 사이트에 대한 인증을 해제

    시도 :

    <system.web> 
        <authentication mode="None" /> 
        <authorization> 
        <allow users="?" /> 
        </authorization> 
    </system.web> 
    

    이 체크를 수행있는 test.txt 파일을 생성하고 웹 브라우저에서 액세스 해보십시오. '액세스 거부'오류가 발생합니까?

    그런 다음 존재하지 않는 aspx 페이지를 열어보십시오. blah.aspx. 액세스가 거부되지 않고 404 오류가 발생합니다.

    +0

    불행히도 이것은 아무것도 바뀌지 않았습니다.그러나 익명 액세스를 위해 구성된 계정에 문제가 있음을 알았습니다. – chiccodoro

    +0

    또는 권한 부여 설정을 덮어 쓸 서비스가있는 폴더에 web.config를 붙이십시오 – CRice