我遇到了我开发的asmx Web服务的授权错误。 Web服务本身不需要任何用户凭据,但似乎Web服务配置为强制执行,尽管我尝试设置配置以允许匿名访问:
我在IIS中设置了相应的网站以允许匿名访问:
此外,我在web.config
中包含以下几行:
<configuration>
...
<system.web>
...
<authorization>
<allow users="*"/>
</authorization>
...
</system.web>
...
</configuration>
尝试从测试客户端调用Web服务时,收到以下错误消息:
HTTP请求未经授权 客户认证方案 '匿名'。身份验证标头 从服务器收到的是'NTLM'。
调用Web服务的代码行如下所示:
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";
}
}
一些要点:
我还尝试将授权标记放在指向Web服务的位置标记中:
<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应用程序有任何关联,如果是,请不要使用我自己的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 :(得分:6)
*
表示经过身份验证的用户,您需要使用?
。
尝试禁用整个网站的身份验证:
<system.web>
<authentication mode="None" />
<authorization>
<allow users="?" />
</authorization>
</system.web>
执行此检查:创建test.txt文件并尝试从Web浏览器访问它。您是否收到“拒绝访问”错误?
接下来,尝试打开不存在的aspx页面,例如blah.aspx。你应该得到404错误,而不是拒绝访问。
答案 1 :(得分:1)
您是否检查了为您的应用提供配置设置的更高级别的web.config和/或machine.config?
答案 2 :(得分:0)
是的,服务器需要配置为允许匿名访问您的网站
<allow users="*" />
就是你需要做的(来自.net部分)。
答案 3 :(得分:0)
从.Net开始,您必须像以前一样允许所有用户。您还必须配置IIS以允许匿名访问。您如何对其余页面进行身份验证?
答案 4 :(得分:0)
配置为用于匿名访问的Internet访客帐户似乎存在问题。如果我将该帐户设置为其他帐户,则可以正常使用。