我的 Web 应用程序拒绝本地 Windows 帐户的 Windows 身份验证
My web application is rejecting Windows authentication for a local Windows account
我的问题是我的服务只允许我自己的 Windows 帐户连接到它,但我想允许来自任何有效 Windows 域帐户的连接。我的服务托管在 IIS Express 中。当我浏览到 Google Chrome 中的 https://localhost:44300/FileRetrievalService.svc/get
时,我看到我的 [WebGet]
方法被调用得很好。当我尝试向它创建 Web 请求时,它也可以工作,只要我指定我自己的 Windows 用户帐户:
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Path", filePath);
request.Credentials = new NetworkCredential("username", "password", "localhost");
return request.GetResponse();
当我尝试在我的机器上指定一个不同的本地 Windows 帐户时,通过将上面代码中的 "username"
和 "password"
更改为我的另一个帐户来验证用户对我的服务确定我的机器上存在,我收到以下错误:
System.Net.WebException: The remote server returned an error: (401)
Unauthorized.
我的服务 Web.config
中有以下内容:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="FileRetrievalPoCV3.FileRetrievalService">
<endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithTransportSecurity" contract="FileRetrievalPoCV3.IFileRetrieval" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="false"/>
</system.webServer>
</configuration>
这个问题的原因是什么?
我猜你的帐户有管理员权限,而另一个帐户没有。如果是这种情况,您需要明确授予对项目文件夹的权限(即使用 Windows Explorer)或将该用户分配给已经拥有权限的组。
我的问题是我的服务只允许我自己的 Windows 帐户连接到它,但我想允许来自任何有效 Windows 域帐户的连接。我的服务托管在 IIS Express 中。当我浏览到 Google Chrome 中的 https://localhost:44300/FileRetrievalService.svc/get
时,我看到我的 [WebGet]
方法被调用得很好。当我尝试向它创建 Web 请求时,它也可以工作,只要我指定我自己的 Windows 用户帐户:
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Path", filePath);
request.Credentials = new NetworkCredential("username", "password", "localhost");
return request.GetResponse();
当我尝试在我的机器上指定一个不同的本地 Windows 帐户时,通过将上面代码中的 "username"
和 "password"
更改为我的另一个帐户来验证用户对我的服务确定我的机器上存在,我收到以下错误:
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
我的服务 Web.config
中有以下内容:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="FileRetrievalPoCV3.FileRetrievalService">
<endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithTransportSecurity" contract="FileRetrievalPoCV3.IFileRetrieval" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="false"/>
</system.webServer>
</configuration>
这个问题的原因是什么?
我猜你的帐户有管理员权限,而另一个帐户没有。如果是这种情况,您需要明确授予对项目文件夹的权限(即使用 Windows Explorer)或将该用户分配给已经拥有权限的组。