Web API 403 禁止使用不记名令牌的网络外部

Web API 403 Forbidden Outside of Network Using Bearer Token

我有一个 Web API 使用 oAuth2,它混合了 API 允许匿名和安全调用。我已将代码部署到网络上的单独服务器,并使用 RESTer(类似于 POSTMAN)验证调用是否有效。如果我从网络外部进行相同的调用,则只有设置为使用 ExternalBearer 令牌的调用才会失败。匿名调用成功。

我检查了这个对我不起作用的解决方案。

我还在部署服务器上确保用户帐户可以完全控制访问目录。

我的匿名调用(在 /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 日志,我可以看到请求进来了。不幸的是,日志只说明它收到了请求。日志确实为请求提供了 401 的 sc-status,这与显示的 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=""

存在专门阻止客户端直接进行身份验证的防火墙问题。我必须让 IT 资源打开 Forefront TMG 属性,进入“身份验证委派”选项卡,然后将方法设置为 "No delegation, and client cannot authenticate directly"

以外的其他内容

这个 SO 线程可能是相同的解决方案,但发布者没有确切提及他们的解决方案是什么: