10、Asp.net Core 5 下 Blazor Server的认证和授权

一直想好好整理一个精简版本的,关于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很想)


具有角色admin和superuser的用户可见


具有策略content-editor的用户可见


三、错误处理

  如果运行出错,可以尝试在App.razor页面,加上CascadingAuthenticatinoState标签


你可能感兴趣的:(10、Asp.net Core 5 下 Blazor Server的认证和授权)