当应用程序的其余部分在windows身份验证下运行时,允许匿名访问ASP.NET Web API控制器
我有一个启用了Windows身份验证的ASP.NET web应用程序。我需要在该应用程序中编写一个ASP.NET Web API控制器,该控制器使用该应用程序的一些数据访问逻辑。我不想单独为WebAPI创建一个新项目,因为我只需要公开一个处理几个请求的小端点 Web API客户端将匿名使用该服务。为了实现这一点,我尝试在控制器和操作上使用AllowAnonymous操作过滤器。但是,当我尝试使用Fiddler访问API时,请求失败,状态401为“401-未授权:由于凭据无效,访问被拒绝”当应用程序的其余部分在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-未授权:由于凭据无效,访问被拒绝” 有没有
有没有办法做到这一点?好的-所有需要身份验证的控制器都需要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.config或WebApiConfig.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,我看不出有什么问题。非常重要的一部分-检查是否启用了匿名身份验证,谢谢