在教程中 有这样一段话:
当用户首次登录时,此中间件将序列化用户主体放入加密的 Cookie 中,并将其发送到浏览器。 在随后的请求中,它会读取 cookie,验证 cookie, 重新创建用户主体,并将其分配给 HttpContext.User 财产。然后,您可以使用以下方法在控制器属性中访问此信息 请求.用户
什么是用户主体?
主体表示运行请求的安全上下文。在 ASP.NET Core 中,可以通过从控制器访问属性HttpContext.User
来访问用户主体。如果您需要在应用程序的其他位置访问它,但仍在 Web 请求的上下文中,您可以使用IHttpContextAccessor
来访问HttpContext
。
一般来说,Microsoft所指的原则是IPrincipal接口(.Net和/或Core(的实现。
从IPrincipal
派生的类型有很多,包括:
声明主体类
ClientRolePrincipal Class
泛型主体类
WindowsPrincipal Class
您还可以创建自己的主体类并根据需要对其进行自定义。
主要对象
主体对象表示运行代码的安全上下文。实现基于角色的安全性的应用程序根据与主体对象关联的角色授予权限。与标识对象类似,.NET Framework 提供了一个 GenericPrincipal 对象和一个 WindowsPrincipal 对象。还可以定义自己的自定义主体类。
主体的必需属性之一是标识:
标识对象
标识对象封装有关正在验证的用户或实体的信息。在最基本的级别,标识对象包含名称和身份验证类型。该名称可以是用户名或 Windows 帐户的名称,而身份验证类型可以是受支持的登录协议(如 Kerberos V5(或自定义值。.NET Framework 定义了一个可用于大多数自定义登录方案的 GenericIdentity 对象,以及一个更专业的 WindowsIdentity 对象,当您希望应用程序依赖于 Windows 身份验证时可以使用该对象。此外,您还可以定义自己的身份类来封装自定义用户信息。
延伸阅读:关键安全概念
如果您使用 Cookie 中间件实现 cookie 认证,要创建包含用户信息的 cookie,请构造一个ClaimsPrincipal
。用户信息被序列化并存储在 Cookie 中。
User Principle
是ClaimsPrinciple
,
public class MyCookieAuthenticationEvents : CookieAuthenticationEvents
{
public override async Task ValidatePrincipal(CookieValidatePrincipalContext context)
{
System.Security.Claims.ClaimsPrincipal userPrincipal = context.Principal;
}
}
指
https://learn.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.2#create-an-authentication-cookie