2017-04-17 106 views
4

我有一个共享库一组的WebAPI服务帐户/登录。这些用于ASP.NET Core MVC Web站点和专用服务器,仅托管没有MVC组件的WebAPI服务。禁止未授权重定向在ASP.NET核心

一切工作的MVC Web站点预期与未授权请求,我得到的304重定向到登录页面(帐户/登录)。然而,当我做出了的WebAPI服务未经授权的请求,我收到相同的304重定向到在这种情况下/帐号/登录我想返回的HTTP 401未经授权结果代码。我宁愿不在自定义的AuthorizeAttribute中处理这个,但宁愿在我的Startup类的网站级别处理。

+0

这是因为您已经为WebAPI和您的MVC View页面的一部分注册了Cookie中间件。你可以发布你的配置方法来确认它吗? – Tseng

回答

6

我怀疑你已经注册ASP.NET核心身份既你的MVC(查看)部分,以及与您的WebAPI的一部分。

您必须将其分开,CookieMiddleware(在.UseIdentity()调用中注册的一个)必须仅针对您的MVC页面的请求进行注册,而不是针对您的WebAPI调用进行注册。

您可以使用.MapMapWhen方法(请参见docs)。

// For requests not going to WebAPI controllers 
app.MapWhen(context => !context.Request.Path.StartsWithSegments("/api"), branch => 
{ 
    branch.UseIdentity(); 
}); 
+1

由于曾国藩,我仍计划在我的WebAPI的服务器使用ASP.NET核心识别功能。我只是不想重定向。这似乎应该是可能的,我错过了什么?我相信PreASP.NET Core版本可以在响应中使用标志“SuppressFormsAuthenticationRedi rect”来实现。这似乎并不存在于ASP.NET核心 – Kevin

+1

那么你可以手动''AutomaticAuthenticate设置为'FALSE',因为ASP.NET核心身份中间件注册多个CookieAuthentications ASP.NET核心的WebAPI路径上注册的饼干中间件(https://github.com/aspnet/Identity/blob/rel/1.1.0/src/Microsoft.AspNetCore.Identity/BuilderExtensions.cs#L36-L39)和它的默认值是自动验证(https://开头github上。 COM/ASPNET /安全/ BLOB /相对/ 1.1.1/src目录/ Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationOptions.cs#L27)。那是什么导致重定向 – Tseng

+0

这样就避免了重定向,但是这一说法,它不再寻找任何类型的令牌。我的目标是将令牌作为授权标头的一部分而不是cookie,并仍然使用ASP.NET标识。然而,这是一个不同的问题。 – Kevin