当应用程序的其余部分在windows身份验证下运行时,允许匿名访问ASP.NET Web API控制器

当应用程序的其余部分在windows身份验证下运行时,允许匿名访问ASP.NET Web API控制器,asp.net,authentication,asp.net-web-api,iis-7.5,Asp.net,Authentication,Asp.net Web Api,Iis 7.5,我有一个启用了Windows身份验证的ASP.NET web应用程序。我需要在该应用程序中编写一个ASP.NET Web API控制器,该控制器使用该应用程序的一些数据访问逻辑。我不想单独为WebAPI创建一个新项目,因为我只需要公开一个处理几个请求的小端点 Web API客户端将匿名使用该服务。为了实现这一点,我尝试在控制器和操作上使用AllowAnonymous操作过滤器。但是,当我尝试使用Fiddler访问API时,请求失败,状态401为“401-未授权:由于凭据无效,访问被拒绝” 有没有

我有一个启用了Windows身份验证的ASP.NET web应用程序。我需要在该应用程序中编写一个ASP.NET Web API控制器,该控制器使用该应用程序的一些数据访问逻辑。我不想单独为WebAPI创建一个新项目,因为我只需要公开一个处理几个请求的小端点

Web API客户端将匿名使用该服务。为了实现这一点,我尝试在控制器和操作上使用AllowAnonymous操作过滤器。但是,当我尝试使用Fiddler访问API时,请求失败,状态401为“401-未授权:由于凭据无效,访问被拒绝”


有没有办法做到这一点?

好的-所有需要身份验证的控制器都需要Authorize属性(可能是全局筛选器)-然后在不需要authN的控制器上使用AllowAnonymous


然后确保在IIS中为vdir启用了匿名身份验证,并确保web.config中没有全局授权元素。

我参加聚会有点晚,但请确保启用了匿名身份验证。然后添加:

<configuration>
  ...
  <location path="api/...">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

...
到您的web.config

我假设你有:

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

...

这对我很有效。

我使用Visual Studio 2015和.NET 4.5.2解决问题的方法是将Web API项目属性设置为同时启用匿名身份验证和Windows身份验证(注意,这些属性也必须在IIS实例中设置)。然后,在我的控制器中,我用
[Authorize]
属性以及自定义身份验证属性的名称修饰了需要身份验证的方法


这允许控制器方法的默认配置接受匿名调用,并且只有少数需要身份验证的特殊方法具有额外的修饰符。我不必向web.configWebApiConfig.cs文件添加任何内容。Global.asax确实调用了设置全局值的自定义身份验证静态函数。

如果更改设置后无效,请尝试
iisreset/start

这对我很有用: 运行状况webapi控制器已启用匿名,而所有其他webapi控制器和mvc控制器仍保持启用ntlm windows身份验证。 web配置根本不包含标记,因为设置是在IIS级别完成的。Windows身份验证已启用,匿名已禁用。(站点级别,身份验证设置)。 网络配置:

<location path="api/health">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>


您的意思是添加路径指向虚拟路径的location元素吗?我试过了,但是运气不好。一切都发生在控制器级别。只需确保web.config没有授权元素,并且启用或允许匿名身份验证(在IIS级别)。是否需要在IIS级别同时允许windows和匿名身份验证?如果我这样做,它不会分配AUTH_USER和LOGON_USER服务器变量,这是windows身份验证失败。我知道这是一个旧主题,但我遇到了相反的问题,我需要授权与控制器的连接,以查明用户是谁,以便只返回某些数据。但是,
this.User.Identity
是空的。。。任何建议请点击@ozy432836-抱歉耽搁了,我整理了一下,虽然不优雅,但效果不错。我所做的是,我在IIS上创建了一个具有匿名身份验证的新web应用程序。意味着你有两个URL,但作为一个API,我看不出有什么问题。非常重要的一部分-检查是否启用了匿名身份验证,谢谢