概述
Asp.net Identity是一个完善的、全面的、庞大的框架,为成员系统提供了一个抽象层。Asp.Net Inentity被设计用来将存储与安全层解耦。因此提供了相当多的API,并且API可以大量的进行扩展。此外,仅需一个API进行配置。
Asp.Net Identity的基本架构
- User Manager是一个中央控制台,在这里可以执行所有的Identity支持的所有操作。例如对用户的管理(CRUD),对角色的管理(CRUD),密码的管理。
- 用户存储模块是一个对用户、密码和角色执行的所有操作的低级接口,支持插入EntityFrameWork Core并且提供自定义存储的抽象。
- 物理存储通俗的说就是一切可以存放数据的数据库,是一种实际的数据存储。
添加Asp.Net Identity
在之前的AppDbContext.cs文件中,添加两个库:namespace:Microsoft.AspNetCore.Identity和Microsoft.AspNetCore.Identity.EntityFrameworkCore,之后将AppDbContext继承身份认证数据对象IdentityDbContext<>(泛型为默认的IdentityUser模型),此后数据库连接器将会自动为我们系统添加数据库用户表的映射,如果数据库的User表还不存在的话,IdentityDbContext将会帮我们自动生成。
在Startup.cs中添加配置方法:app.UseAuthentication();打开程序包管理器控制台,输入以下命令:Add-mirgration IndentityInit之后输入Update-database当出现Done时,数据库更新完毕,打开数据库对象资源管理器,发现我们的数据库中多了如下的几张表,执行成功。
用户认证
右击项目名,点击添加,选择标识(Identity),我们只需选择Login、logout、Register三个文件。数据上下文类选择AppDbContext (lanzhoubeefnoodles.Models)之后进行添加。添加后,项目生成了一个新的文件夹Areas。打开其中的IdentityHostingStartUp.cs进行身份认证以及使用的数据库上下文的配置。
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((context, services) => {
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<AppDbContext>();
});
}
在_Layout.cshtml中添加代码:
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-controller="Home" asp-action="Index" class="navbar-brand">正宗兰州拉面</a></li>
<li><a asp-controller="Feedback" asp-action="Index">意见反馈</a></li>
<partial name="_loginPartial">
</ul>
</div>
</div>
</nav>
<div class="container body-content">
<div class="row">
@RenderBody()
</div>
</div>
@RenderSection("Scripts", required: false);
<body>
运行项目:点击注册按钮,填写相关信息后,提示注册成功后,自动返回首页,并且显示用户名。
用户授权
我们在首页浏览时,直接点击意见反馈后能提交页面,这样是不符合逻辑的,因此,需要将网页的权限进行设置。在FeedbackController.cs文件中引入Microsoft.AspNetCore.Authorization;在类名前加入[Authorize]。这样用户在未登录时点击提交反馈时会跳转到登录界面进行权限的控制。
总结
本篇简单地介绍了一些Identity的身份框架的使用,当然,由于本人的水平有限,因此其中的一些更加深层的例如注册授权策略并未详细的描述。通过Identity框架,我们可以很轻松地进行对用户的登录、注册一系列操作进行管理和控制,确保了网站的安全性和解耦性。