WCF 4中的Windows用户名休息

时间:2010-10-13 03:33:22

标签: wcf authentication wcf-rest

我在WCF REST应用程序中遇到Windows身份验证问题。

使用VS2010,我选择了New Project> WCF REST Service Application。

我修改了web.config以确保Windows身份验证并拒绝匿名用户。

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Windows" />

    <authorization>
      <deny users="?"/>
    </authorization>

  </system.web>

我修改了Service1.cs以返回响应中的用户名:

[WebGet(UriTemplate = "",
    RequestFormat= WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle=WebMessageBodyStyle.Bare)]
public List<SampleItem> GetCollection()
{
    // TODO: Replace the current implementation to return a collection of SampleItem instances
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
    string fullID = ServiceSecurityContext.Current.WindowsIdentity.Name;

    return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello " + fullID } };
}

我测试它在本地计算机上成功运行,然后我将其发布到Windows Server 2008上的IIS7。在IIS管理器中,我在应用程序上启用Windows身份验证并禁用所有其他身份验证类型。 我给它自己的应用程序池,集成了托管管道模式。

我可以在Win2008机器上运行的Windows资源管理器中成功查看它(http:// localhost / JobManager / Service1 /)

然而,从其他机器使用IE 7,它会提示我两次输入用户名/密码,我填写两次,但第二次收到401错误。 (未经授权:由于凭证无效,访问被拒绝。)

1 个答案:

答案 0 :(得分:0)

通过将应用程序池使用的身份更改为可以访问目录服务的身份来解决。