WCF REST返回401不使用Windows身份验证授权响应

时间:2014-11-29 14:03:14

标签: c# asp.net wcf rest authentication

我有两个应用程序:

  1. 在Windows Server 2008 R2服务器上部署的Web应用程序。此应用程序用作WCF REST调用的端点。

  2. Windows Forms Desktop C#应用程序,它将对上面的Web应用程序进行REST调用。此应用程序也在同一台Windows Server 2008 R2服务器计算机上运行。

  3. 如果我使用表单身份验证使用Web应用程序但是当我将其身份验证更改为Windows时,一切正常,但是REST调用停止工作,它开始从Web应用程序获得401未授权的响应。

    以下是我的网络应用程序的一些细节:

    WCF的WebHttpBinding设置为" WebHttpSecurityMode.TransportCredentialOnly"凭证为HttpClientCredentialType.Windows。

     this.Security.Mode = WebHttpSecurityMode.TransportCredentialOnly;
     this.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    

    本网站的Web.config有:

      <authentication mode="Windows" />
      <authorization>
        <deny users="?" />
      </authorization>
    

    此站点的IIS身份验证设置:

    enter image description here

    Windows身份验证的提供程序设置为&#34;协商&#34;:

    enter image description here

    为了进一步调查我尝试调试应用程序并注意到REST调用能够到达Global.asax的BeginRequest方法,但在执行该方法后,401响应返回给客户端。我甚至无法访问ServiceAuthorizationManager,因为之前返回了401响应。

    我已经尝试了以下所有WCF REST调用:从Windows Forms C#客户端对此应用程序进行GET,PUT和POST,并且所有这些调用都返回为401未经授权的服务器。

    当我将Web应用程序的身份验证模式从Windows更改为Forms时,同一个C#客户端从Web应用程序获得所需的响应。

    我想在上述案例中添加更多信息。 即使使用Web应用程序的Windows身份验证模式,如果我尝试通过Web浏览器直接通过REST调用请求服务器(在我的情况下为Chrome),我也可以获得响应。只有当我从C#Windows窗体客户端进行REST调用时才会出现此问题。我想它可以在这种情况下直接从浏览器进行REST调用,因为浏览器必须向服务器发送一些授权标头来处理请求。

    您可以帮助我解决从浏览器以外的客户端进行REST调用的情况吗?

    如何让来自客户端的REST调用点击WCF REST端点,而不是从服务器获取401响应?

0 个答案:

没有答案