我有一个使用oAuth2的Web API,其中包含允许匿名和安全调用的混合API。我已将代码部署到网络上的单独服务器上,并使用RESTer(类似于POSTMAN)进行了验证,以确保调用能够正常工作。如果我从网络外部进行相同的呼叫,则只有设置为使用ExternalBearer令牌的呼叫才会失败。匿名呼叫成功。
我签出了对我不起作用的解决方案。 HTTP 403 Forbidden: Access is denied ASP.NET Web API
我还确保在部署服务器上,该用户帐户可以使用“完全控制”权限访问该目录。
我的匿名呼叫(在/ token呼叫旁边)具有[AllowAnonymous]和[HttpPost]批注。我的安全呼叫具有[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]和[HttpPost]批注。
[Authorize]
[RoutePrefix("api/Lookups")]
public class MySettingsClass : ApiController
/* Constructor omitted for readability*/
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
[HttpPost]
[Route("GetSettings")]
public Settings GetSettings(GetSettingsCommand command)
{
//Do something here
return settings;
}
在这一点上,我怀疑IIS在某种程度上没有正确配置,或者防火墙正在做某事,但是我不确定。我检查了服务器上的IIS日志,可以看到请求传入。不幸的是,该日志仅表示收到了请求。该日志确实为请求提供了一个sc-status状态401,与所示的403不同。
客户端显示的实际403错误:
403 Forbidden ( The server denied the specified Uniform Resource Locator(URL). Contact the server administrator.)
更新: 当我启用IIS失败请求跟踪时,在日志中收到此警告。
ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="401", HttpReason="Unauthorized", HttpSubStatus="0", ErrorCode="The operation completed successfully.(0x0)", ConfigExceptionInfo=""
答案 0 :(得分:0)
存在一个防火墙问题,该问题专门阻止客户端直接进行身份验证。我必须拥有一个IT资源来打开Forefront TMG属性,进入“身份验证委派”选项卡,并将该方法设置为“没有委派,并且客户端无法直接进行身份验证”之外的其他方法。
此SO线程可能是相同的解决方案,但发布者并未确切提及其解决方案:WebAPI : 403 Forbidden after publish website