Blazor应用中的认证与授权

在这篇文章中,将详细探讨如何在Blazor服务器端应用程序中使用认证和授权。是的,现在可以直接在Blazor服务器端应用程序中使用认证和授权了。.NET Core 3.0的最新预览版本和最新版本的Visual Studio 2019允许使用ASP.NET Identity与Blazor应用程序一起工作。

在本教程中,将学习到:

  • 如何在SQL Server中创建数据库并用于ASP.NET Identity表的创建
  • 如何根据认证和授权显示菜单
  • 对于未认证和未授权的成员,显示不同的菜单

ASP.NET Identity允许向系统添加登录功能。在这个演示中,将使用SQL Server来存储用户详细信息和配置文件数据。将使用ASP.NET Identity进行新用户注册、登录,并维护用户配置文件数据。如果谈论登录,重要的部分是登录用户是否经过认证,并且是否被授权查看页面。

认证和授权

检查有效用户。这里的问题是如何检查用户是否有效。当用户第一次访问网站时,他/她将为该网站注册。他们的所有信息,如用户名、密码、电子邮件等,将存储在网站数据库中。当用户输入他/她的用户ID和密码时,这些信息将与数据库进行核对。如果用户输入的用户ID和密码与数据库中的相同,那么他或她就是一个有效的用户,并将被重定向到网站的首页。如果用户输入的用户ID或密码与数据库不匹配,那么登录页面将显示一条消息,如“请输入有效的用户名或密码”。检查用户是否有效以访问网站的整个过程称为认证

一旦用户通过认证,他们需要根据他/她的角色被重定向到相应的页面。例如,当管理员登录时,他/她需要被重定向到管理员页面。如果会计登录,他/她需要被重定向到他的账户页面。

确保计算机上安装了所有先决条件。如果没有,请一个接一个地下载并安装它们。

先决条件

  • 最新预览版的Visual Studio 2019
  • .NET Core 3.0预览版6 SDK
  • Blazor语言服务扩展

使用代码

首先,将创建一个数据库,并在appsettings.json文件中设置DefaultConnection的连接字符串,用于新的数据库连接。将使用这个数据库来创建ASP.NET Core Identity表。

创建数据库:

USE MASTER; GO -- 1) 检查数据库是否存在。如果数据库存在,则删除并创建新的数据库 IF EXISTS ( SELECT [name] FROM sys.databases WHERE [name] = 'BlazorDB' ) DROP DATABASE BlazorDB; GO CREATE DATABASE BlazorDB; GO USE BlazorDB; GO

运行数据库脚本后,可以看到数据库已经创建,但表尚未创建。

在安装了上述所有先决条件和ASP.NET Core Blazor扩展后,点击桌面上的Start >> Programs >> Visual Studio 2019 >> Visual Studio 2019。点击New >> Project。

点击ASP.NET Core Web Application并点击Next。输入项目名称并点击Create按钮。现在,可以看到ASP.NET Core 3.0已经列出。选择Blazor(服务器端),然后点击Change Authentication来设置项目的认证。

在这里,选择Individual User Account将所有用户详细信息存储到SQL服务器。创建ASP.NET Core Blazor应用程序后,等待几秒钟。将在解决方案资源管理器中看到以下结构。在这里,可以看到pages文件夹包含所有的razor页面,Shared文件夹类似于ASP.NET MVC共享文件夹,将包含导航菜单页面、MainLayout页面用于内容显示,以及LoginDisplay页面,用于新用户注册和登录网站。appsettings.json页面用于设置数据库连接字符串。

在appsettings.json文件中,可以找到DefaultConnection连接字符串。在这里,在连接字符串中,更改SQL Server名称、UID和PWD,以创建并存储所有用户详细信息在一个数据库中。

现在Blazor Web应用程序已经准备好让用户在网站上注册,用户注册后也可以登录系统。构建并运行应用程序以注册第一个用户。点击注册链接以注册第一个用户。

迁移:当点击注册按钮时,可以看到以下页面。不要惊慌,因为第一次运行它时,需要进行迁移,只需点击Apply Migrations按钮。

可以看到迁移应用的确认,然后点击Try refreshing the page消息。刷新页面,可以看到新注册的用户已经登录到网站。

还可以点击网站顶部的用户名来更新用户详细信息。

当刷新数据库时,可以看到所有Identity表都已创建。

现在让看看如何为未经认证的用户和已认证用户显示菜单。为此,首先添加一个razor页面,并将其命名为Userpage,如下所示。

右键单击Pages文件夹,然后单击添加新页面。将其命名为Usepage并点击Add。

在页面中,只添加一个H1标签和一些文本,表示尚未登录。

现在将通过用户认证和授权来显示和隐藏菜单。为此,首先打开菜单页面。可以看到Shared文件夹下的NavMenu.razor。

现在可以看到,默认情况下已经添加了3个菜单,分别是Home、Counter和Fetch data。将只为已认证和已授权的用户显示Counter和Fetch data菜单。

对于未授权用户,将显示新创建的Userpage。为此,将使用以下代码:

<AuthorizeView> <Authorized> <li class="nav-item px-3"> <NavLink class="nav-link" href="counter"> <span class="oi oi-plus" aria-hidden="true"></span> Counter </NavLink> </li> <li class="nav-item px-3"> <NavLink class="nav-link" href="fetchdata"> <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data </NavLink> </li> </Authorized> <NotAuthorized> <li class="nav-item px-3"> <NavLink class="nav-link" href="NonUser"> <span class="oi oi-list-rich" aria-hidden="true"></span> Non Authorized Menu </NavLink> </li> </NotAuthorized> </AuthorizeView>

在这里,可以看到使用了<Authorizeview>标签,这个标签用于检查用户是否已授权。在<Authorizeview>标签内,使用了<Authorized>标签来检查用户是否已授权并显示消息,同样使用<NotAuthorized>标签来显示未授权用户的信息。根据Authorized和NotAuthorized来显示和隐藏菜单。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485