在这篇文章中,将详细探讨如何在Blazor服务器端应用程序中使用认证和授权。是的,现在可以直接在Blazor服务器端应用程序中使用认证和授权了。.NET Core 3.0的最新预览版本和最新版本的Visual Studio 2019允许使用ASP.NET Identity与Blazor应用程序一起工作。
在本教程中,将学习到:
ASP.NET Identity允许向系统添加登录功能。在这个演示中,将使用SQL Server来存储用户详细信息和配置文件数据。将使用ASP.NET Identity进行新用户注册、登录,并维护用户配置文件数据。如果谈论登录,重要的部分是登录用户是否经过认证,并且是否被授权查看页面。
检查有效用户。这里的问题是如何检查用户是否有效。当用户第一次访问网站时,他/她将为该网站注册。他们的所有信息,如用户名、密码、电子邮件等,将存储在网站数据库中。当用户输入他/她的用户ID和密码时,这些信息将与数据库进行核对。如果用户输入的用户ID和密码与数据库中的相同,那么他或她就是一个有效的用户,并将被重定向到网站的首页。如果用户输入的用户ID或密码与数据库不匹配,那么登录页面将显示一条消息,如“请输入有效的用户名或密码”。检查用户是否有效以访问网站的整个过程称为认证。
一旦用户通过认证,他们需要根据他/她的角色被重定向到相应的页面。例如,当管理员登录时,他/她需要被重定向到管理员页面。如果会计登录,他/她需要被重定向到他的账户页面。
确保计算机上安装了所有先决条件。如果没有,请一个接一个地下载并安装它们。
首先,将创建一个数据库,并在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来显示和隐藏菜单。