【问题标题】:Web api with 2 pipelines and a different authentication for each one具有 2 个管道和每个管道的不同身份验证的 Web api
【发布时间】:2016-10-14 15:41:57
【问题描述】:

我正在开发一个包含 2 个端点 A 和 B 的 Web Api,我需要对 A 使用 BasicAuthentication,对 B 使用自定义验证。我正在尝试不将代码拆分为 2 个项目,为此我将 OWIN 与 2管道:

        app.Map("/api/A", basicAuth =>
        {                
            basicAuth.UseBasicAuthentication(container);
        });

        app.Map("/api/B", idTokenAuth =>
        {                
            idTokenAuth.UseBearerAuthentication(container);
        });

我遇到的问题是身份验证后它没有重定向到相应的控制器并始终返回 HTTP/1.1 404 Not Found。

有什么建议吗?

【问题讨论】:

标签: c# asp.net-web-api2 owin katana


【解决方案1】:

我假设在此之后你有 app.UseWebApi?在这里使用 Map 的问题是它在完成后不会重新加入父管道(尽管它会落入 IIS/MVC)。打个比方……

你想要的是:

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); } DoWebApi();

但 Map 实际上做的是:

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); return; } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); return; } DoWebApi();

我们已经提出了一种不同的 UseWhen 模式,您可以遵循,但您必须复制源代码并反向移植它: https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http.Abstractions/Extensions/UseWhenExtensions.cs

【讨论】:

  • 你说得对,这正是我的问题,退货!我没有设法使其与链接中的示例一起使用,但我还阅读了有关 owin 如何工作的更多信息。出于我想要的目的(2 个身份验证方法),我可以实现 2 个身份验证方法并将它们添加到同一管道并使用被动 AuthMode 我能够处理请求,但我再次错过了对控制器的重定向!跨度>
猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多