WebApi.Owin 中的 SuppressDefaultHostAuthentication 也抑制 webapi 外部的身份验证
Posted
技术标签:
【中文标题】WebApi.Owin 中的 SuppressDefaultHostAuthentication 也抑制 webapi 外部的身份验证【英文标题】:SuppressDefaultHostAuthentication in WebApi.Owin also suppressing authentication outside webapi 【发布时间】:2014-03-19 15:54:42 【问题描述】:我遇到了一个解决方案的问题,我使用了 Visual Studio SPA 模板中的部分来在 WebApi 中使用带有 Oauth 身份验证的帐户控制器。
app.UseOAuthBearerTokens(OAuthOptions);
那我在owin webapi注册是在做什么
config.SuppressDefaultHostAuthentication();
但这也抑制了 webapi 环境之外的默认 cookie 身份验证。难道这是本意。如果是这样,我如何设置 WebApi 以抑制 cookie 身份验证,但它仍然在整个环境中为其他请求活动?
【问题讨论】:
This blog post by Brock Allen 详细说明了发生这种情况的原因。 【参考方案1】:这似乎是一种很好的做法,尤其是当您在同一 IIS 目录中混合使用 OWIN 托管的应用程序和常规应用程序时,使用 app.Map 设置 WebApi。
public void Configuration(IAppBuilder app)
var configuration = WebApiConfiguration.HttpConfiguration;
app.Map("/api", inner =>
inner.UseWebApi(configuration);
);
我的所有控制器都配置了“api”前缀路由,而我只是将其移至 map 函数。现在 webapi 正在隔离运行,它可以与我的应用程序的其余部分一起工作。感谢@PinpointTownes 为我指明了这个方向。
【讨论】:
确保安装 nugget pkg Microsoft ASP.Net Web API 2.2 OWIN。它已经安装了所有东西,但是...... 包标识符是Microsoft.AspNet.WebApi.Owin
WebApiConfiguration 无处可寻。我正在使用 MVC 5 并安装了 Microsoft.AspNet.WebApi.Owin 5.2.3。
这不在此答案的范围内-您也可以在 MVC5 中执行 app.Map ,这就是答案。 app.Map("/api", inner => inner.UseMvc());但是,如果您使用 MVC 部分,请不要认为它也会改变您的操作。如果这还不足以解决您的问题,请为您的问题创建一个新问题。以上是关于WebApi.Owin 中的 SuppressDefaultHostAuthentication 也抑制 webapi 外部的身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Web API 2,OWIN 身份验证,SignOut 不注销