내가 개발 한 asmx 웹 서비스에 대한 인증 오류가 발생했습니다. 웹 서비스 자체에는 사용자 자격 증명이 필요하지 않지만 익명 액세스를 허용하도록 구성하려고했지만 웹 서비스가이를 구현하도록 구성되어 있습니다.익명 액세스를 허용하는 ASMX 웹 서비스
나는 해당 웹 사이트를 설정했습니다. IIS에서 익명 액세스를 허용하려면 다음 web.config
에
또한 내가 포함 한 다음 줄 :
<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을 사용하여 클라이언트를 인증하려고 시도하면 제대로 작동합니다.
아래를 참조하고 웹 서비스를 가리키는 위치 태그 내에 인증 태그를 넣어 :
<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>
몇 가지 ... 클라이언트 측 서비스 구성과 관련된 테스트 클라이언트에서 web.config 섹션을 게시 할 수 있습니까? 또한 서비스 측면에서 메서드를 정적으로 만들려고 했습니까? 나는 다른 컨텍스트 (예 : 일반 aspx 페이지)에서 WebMethods가 정적이어야한다는 것을 알고 있지만 asmx에 대해서는 기억이 안납니다. – Andrew
@Andrew : 귀하의 의견에 감사드립니다. 내 질문에 몇 가지 세부 정보를 추가했습니다. 또한 웹 브라우저를 통해 액세스를 시도 했으므로 app.config가 적절하지 않을 수도 있습니다. 나는 여전히 참조 용으로 추가했다. 당신은 결코 알지 못합니다 ... – chiccodoro
익명 액세스를 위해 사용중인 사용자가 귀하의 폴더에 대한 읽기 권한을 가지고 있습니까? –