在 Blazor 应用程序中,AuthenticationState 是一个核心概念,用于表示用户的身份验证状态。它提供有关当前用户的信息,例如是否已登录、用户的身份信息(如用户名、角色等)。
AuthenticationState 通常由 AuthenticationStateProvider 提供,Blazor 使用它来管理和传播用户身份验证的上下文。
AuthenticationState 的结构
 
   AuthenticationState 是一个简单的类,包含一个 ClaimsPrincipal 对象,表示用户的身份和角色信息:
Public class AuthenticationState 
{ public ClaimsPrincipal User { get; } public AuthenticationState(ClaimsPrincipal user) { User = user; } 
} - User:一个- ClaimsPrincipal对象,包含用户的身份验证信息和声明(Claims)。- 如果用户已认证,User.Identity.IsAuthenticated返回true。
- 如果用户未认证,User.Identity.IsAuthenticated返回false。
 
- 如果用户已认证,
使用场景
          Blazor 使用 AuthenticationState 来管理用户的身份状态,常见的使用场景包括:
- 显示用户信息:显示当前登录用户的姓名、角色等。
- 条件显示内容:根据用户是否登录或其角色显示不同的内容。
- 授权控制:使用 Blazor 的 [Authorize]特性保护组件或页面,确保只有特定用户能够访问。
配合 AuthenticationStateProvider
 
        Blazor 中,AuthenticationState 是通过 AuthenticationStateProvider 提供的。框架内置了以下两种身份验证状态提供程序:
- ServerAuthenticationStateProvider:适用于 Blazor Server。
- RemoteAuthenticationStateProvider:适用于 Blazor WebAssembly,与远程身份验证服务交互。
       开发者可以实现自定义的 AuthenticationStateProvider 来提供自定义的认证逻辑。
示例:如何获取 AuthenticationState
 
1. 通过依赖注入
        在组件中,可以通过注入 AuthenticationStateProvider 或 Task<AuthenticationState> 获取用户的身份状态。
@inject AuthenticationStateProvider AuthenticationStateProvider 
<button @onclick="CheckAuthenticationState">检查认证状态</button> 
@code 
{ private async Task CheckAuthenticationState() { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); var user = authState.User; if (user.Identity != null && user.Identity.IsAuthenticated) { Console.WriteLine($"用户已登录,用户名:{user.Identity.Name}"); } else { Console.WriteLine("用户未登录"); } } 
} 2. 使用 AuthorizeView
 
        Blazor 提供了一个内置组件 AuthorizeView,可以根据 AuthenticationState 自动显示不同的内容:
<AuthorizeView> <Authorized> <p>欢迎, @context.User.Identity.Name!</p> </Authorized> <NotAuthorized> <p>请登录以访问更多内容。</p> </NotAuthorized> 
</AuthorizeView> - Authorized:用户已登录时显示的内容。
- NotAuthorized:用户未登录时显示的内容。
工作原理
-  身份验证状态的初始化 AuthenticationStateProvider提供用户的身份验证状态,它通过实现GetAuthenticationStateAsync方法来生成一个AuthenticationState。
-  状态的传播 
 使用CascadingAuthenticationState组件将AuthenticationState注入到整个应用的组件树中。
-  组件访问 
 各组件可以通过依赖注入直接访问AuthenticationState或使用内置的授权组件(如AuthorizeView)来动态响应用户的认证状态。
典型应用场景
-  权限管理 
 根据用户角色控制页面或功能的可见性,例如管理员才能访问某些页面。
-  用户个性化 
 显示用户相关的信息,如用户名或个性化内容。
-  安全性 
 确保未经授权的用户无法访问受保护的资源。