如何在ASP.Net Web API中为特定控制器启用Windows身份验证

时间:2014-08-26 16:55:30

标签: asp.net iis asp.net-web-api windows-authentication

如果有一种方法只能为特定ASP.Net Web API控制器的特定操作启用Windows身份验证,那么我就会徘徊。我的Web API Web服务有几个具有大量操作的控制器,但只有一个控制器的一个操作需要Windows身份验证。此Web服务使用Web API 2.1实现,并托管在IIS(v7.5及更高版本)中。尽管如此,它是一个Intranet Web服务,我不想在控制器和不需要它的操作上启用Windows身份验证。如果有办法为特定控制器和操作启用Windows身份验证,请告诉我。

我的网络服务代码与下面的代码类似。只有 Controller1.Action1 实施的端点 api / controller1 / action1 才需要进行Windows身份验证。其余操作不需要Windows身份验证:

[RoutePrefix("api/controller1")]
public class Controller1: ApiController
{
    [Route("action1")]
    public HttpResponseMessage Action1()
    {
        return Request.CreateResponse<object>(HttpStatusCode.OK, null);
    }
    [Route("action2")]
    public HttpResponseMessage Action2()
    {
        return Request.CreateResponse<object>(HttpStatusCode.OK, null);
    }
}


[RoutePrefix("api/controller2")]
public class Controller2 : ApiController
{
    [Route("action1")]
    public HttpResponseMessage Action1()
    {
        return Request.CreateResponse<object>(HttpStatusCode.OK, null);
    }
    [Route("action2")]
    public HttpResponseMessage Action2()
    {
        return Request.CreateResponse<object>(HttpStatusCode.OK, null);
    }
}

谢谢你, 丽塔

2 个答案:

答案 0 :(得分:3)

这是你想要的吗?将其添加到配置文件中。

<location path="api/controller1">
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</location>

答案 1 :(得分:0)

我遇到了同样的问题。解决方案是

  1. 在托管API的IIS网站中启用Windows身份验证。如果您使用OWIN进行自托管,请参阅此SO discussion

  2. 然后在需要Windows身份验证的控制器或控制器操作中,只需添加“授权”属性。

    [授权] public async Task GetDocumentContent([FromUri] DocumentContentRequest request) {

    }

  3. 就是这样。