一直想好好整理一个精简版本的,关于asp.net core blazor下关于网站认证(Authentication)和授权(Authorization)的知识。
首先明确下概念:
认证(Authentication):用于认证登录权限,一般是登录账号名和密码确认的认证,保证用户认证资格。
授权(Authorization):授权,比如很多后台,需要区分管理员,分级管理,这样通过授权机制,可以很好的进行权限管理。
因为Blazor包括WebAssembly和Server两种模式,为避免混淆,先说说Server的认证。(认证这东西,还是交给服务端认证比较好)
一、认证(Authentication)
1、AuthenticationStateProvider:这是认证的基础服务,每个razor页面,会自动维护一个实例,需要的时候通过GetAuthenticationStateAsync()方法进行调用,获取当前认证用户信息。
2、AuthorizeView:这个是页面的认证组件。大部分时候,我们通过代码逻辑判断认证比较麻烦,blazor提供了一个已经认证的组件,以及其中可以处理没有认证,或者正在认证中的页面,十分方便。
通过认证组件的形式,无需考虑后端逻辑,只需要用户在登录后即可。
二、授权(Authorization)
授权默认是在认证的情况下进行的逻辑,如果没有授权操作,系统会自动处理(这个时候可以把认证和授权当作同等对待,具有授权的操作必须认证,否则视作没有权限)
但实际中,授权更应该是通过自定义的方式,为认证用户划分权限,这点Blazor做得非常人性化,可以通过三种方式进行:
Role:统一角色。为用户维护一个统一的角色标识。
Claim:这个是登录的时候需要用到的,以Key-Value的形式,存储登录用户的信息。
Policy:策略机制。(先不聊这个,感觉跟Role很想)
三、错误处理
如果运行出错,可以尝试在App.razor页面,加上CascadingAuthenticatinoState标签