Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc和api之间的授权中间件差异_Asp.net Core - Fatal编程技术网

Asp.net core mvc和api之间的授权中间件差异

Asp.net core mvc和api之间的授权中间件差异,asp.net-core,Asp.net Core,试图让我了解一下为MVC后端和API后端设置授权中间件的确切区别 我的理解(基本)是,用[Authorize]属性修饰的控制器将调用授权处理程序来验证客户端的身份,然后 1) 在MVC后端,如果未通过身份验证失败,将重定向到默认登录页面,用户将在其中输入其凭据等 2) 在API返回的情况下,控制器将简单地用401消息响应(重定向在API和客户端中没有意义,例如SPA必须确定下一步要做什么) 我想问一下在startup类中设置app builder时存在哪些差异,因为我假设授权中间件的功能根据不同

试图让我了解一下为MVC后端和API后端设置授权中间件的确切区别

我的理解(基本)是,用[Authorize]属性修饰的控制器将调用授权处理程序来验证客户端的身份,然后

1) 在MVC后端,如果未通过身份验证失败,将重定向到默认登录页面,用户将在其中输入其凭据等

2) 在API返回的情况下,控制器将简单地用401消息响应(重定向在API和客户端中没有意义,例如SPA必须确定下一步要做什么)

我想问一下在startup类中设置app builder时存在哪些差异,因为我假设授权中间件的功能根据不同情况而不同(一种情况重定向,而另一种情况不重定向)


另外,我知道MVC案例通常会使用cookie,而API案例会是JWT,但我想知道重定向或不重定向的决定是在哪里处理/配置的?

如果使用
app.UseAuthorization()
向应用程序添加授权中间件,并且在控制器/操作上应用
Authorize
属性意味着控制器/操作需要一个已登录的用户,如果用户未通过身份验证,则身份验证模式将受到质疑。MVC和WebAPI中没有不同的逻辑

MVC将重定向是因为您添加了cookie身份验证:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
CookieAuthenticationDefaults。传递到
AddAuthentication
的AuthenticationScheme
设置应用程序的默认身份验证方案,因此如果用户未经身份验证,将触发cookie身份验证,
Account/Login
是cookie身份验证的默认登录路径,所以用户将被重定向到该url

在WebAPI方面,若您还添加了cookie身份验证,那个么您将重定向到相同的路径,但通常WebAPI是一个服务,并没有任何UI元素。因此,重定向URL等功能不适用于Web API。此外,Web API可以被各种客户端使用,包括单页应用程序(SPA)和非浏览器客户端。所以我们通常使用JWT承载认证。若用户未经过身份验证,并且在web api中重定向(也没有意义),JWT承载身份验证将返回401