app.UseAuthentication()、app.UseAuthorization() 及其它

首先,这两段代码拼写就比较容易混淆,一个是UseAuthentication,一个是UseAuthorization,很容易看混。

  • app.UseAuthentication(); 这个方法代表"认证"中间件的添加,这个中间件负责对来自客户端的请求进行认证,也就是说,它会把请求中包含的用户信息(比如一个cookie或者token)解释出来,然后构建出一个代表用户身份的ClaimsPrincipal对象。这个ClaimsPrincipal对象包含了用户的多个身份标识和相关信息(Claims,比如用户名,角色等)。所以,简单说,app.UseAuthentication();就是告诉应用,对于每一个请求,都需要找出谁在请求,也就是确定请求的发起者是谁。
    UseAuthentication中间件的工作过程如下:
    1. 当请求到达UseAuthentication中间件时,中间件会查看请求中是否包含某种形式的凭据(如cookies、headers等)。
    2. 如果找到了凭据,UseAuthentication就会触发相应的身份验证处理程序来验证这些凭据。每种凭据类型(如Bearer token、cookies等)通常对应一个身份验证处理程序。
    3. 如果验证成功,处理程序将创建一个表示用户身份的ClaimsPrincipal对象,并将其设置为当前HTTP上下文的用户(HttpContext.User)。
    4. 如果验证失败或请求中没有找到凭据,HttpContext.User将为null。
  • 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;

 

 

 
posted @   超难微猫  阅读(612)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示