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

Posted

技术标签:

【中文标题】如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证【英文标题】:How to enable Windows authentication for specific controller in ASP.Net Web API 【发布时间】:2014-08-26 16:55:29 【问题描述】:

如果有一种方法可以仅针对特定 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);
    

谢谢你, 丽塔

【问题讨论】:

我也有同样的要求。你知道怎么做吗? 我选择了部署时间解决方案。我使用 appcmd.exe 工具为路由启用 Windows 身份验证: C:\Windows\system32\inetsrv\appcmd.exe set config "baseUrl/api/controller1/action1" -section:system.webServer/security/authentication/windowsAuthentication /启用:“真” /commit:apphost 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我遇到了同样的问题。解决办法是

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

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

    [授权] 公共异步任务 GetDocumentContent([FromUri]DocumentContentRequest 请求)

就是这样。

【讨论】:

以上是关于如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

无法在面向 netcoreapp3.0 的 ASP.NET Core WebApp 中为特定 API 控制器启用 CORS

如何指定在 ASP.NET Web API 中是需要 JSON 还是 XML?

如何在 ASP.NET MVC 4 中为特定授权用户显示特定的 html 元素

如何在 ASP.NET MVC 中为字符串设置 10 或 17 的特定长度

如何在 ASP.Net 中为一组 Web 请求发送身份验证标头

如何在 ASP.NET MVC 网站中为 cookie 设置“安全”标志?