首先,这两段代码拼写就比较容易混淆,一个是UseAuthentication,一个是UseAuthorization,很容易看混。
UseAuthentication
中间件的工作过程如下:
-
app.UseAuthorization();
这个方法代表"授权"中间件的添加,这个中间件负责根据认证中间件建立的ClaimsPrincipal
进行授权判断,也就是根据用户的身份信息决定用户能否有权访问请求的资源(比如一个特定的Controller或者一个Action)。所以,简单说,app.UseAuthorization();
就是告诉应用,确定了谁在请求后,还需要判断其是否有权限请求这个资源。
Authentication 决定是否可以做( 验证登录凭证)
Authorization 决定可以用来做什么(鉴权)
Authentication 构建出 ClaimsPrincipal,供Authorization 进行鉴权。
Authentication scheme 是什么
身份验证方案,用来定义应用如何处理身份验证的策略或规则。
如
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme);
"JwtBearerDefaults.AuthenticationScheme" 就是一个身份验证方案,它告诉 ASP.NET Core 使用 JwtBearer 身份验证作为默认的身份验证方案。
Authentication handler 是什么
身份验证处理程序(Authentication Handlers)是进行特定身份验证方案(Authentication Schemes)处理的组件。
一个身份验证处理程序是一个实现了 IAuthenticationHandler 或 IAuthenticationSignInHandler 接口的类。当你调用 AddAuthentication 方法注册身份验证服务时,会将各个身份验证处理程序添加到 ASP.NET Core 的 DI(依赖注入)系统中。最常见的身份验证处理程序包括 JwtBearerHandler(封装了 JWT Bearer 身份验证的逻辑)和 CookieAuthenticationHandler(封装了 Cookie 身份验证的逻辑)等。
ClaimsPrincipal 是啥
ClaimsPrincipal
是.NET中用于表示当前用户的类。它可以包含一个或多个ClaimsIdentity
,每个ClaimsIdentity
代表一个用户的唯一身份。ClaimsPrincipal
通过这些ClaimsIdentity
提供关于用户身份的信息,包括用户名、角色等。
示例
// 检查用户是否属于某个角色:
bool isInRole = HttpContext.User.IsInRole("Admin");
//获取用户名
string username = HttpContext.User.Identity.Name;
标签:ClaimsPrincipal,请求,中间件,app,UseAuthentication,身份验证,UseAuthorization From: https://www.cnblogs.com/xieweikang/p/17963532