ASP.NET Identity是一种新的身份验证系统,旨在取代ASP.NET的现有成员资格系统。 ASP.NET Identity是一个基于OWIN(.NET的开放Web接口)的库。
当我们使用模板创建MVC项目时:
可以启用身份验证功能
选择"个人身份账户"意味着用户帐户信息将存储在应用程序数据库中(这意味着用户将不会使用任何基于外部/ OAuth的登录名)。
身份认证的类型:
1.选择认证的类型,创建MVC项目,查看引用会发现:会自动入EF和EF.sqlserver组件
并且在App_Data文件下,会有一个隐藏的数据库文件:
点击这个图标就可以显示了
数据库:
所有以"“AspNet"开头的表都是由ASP.NET Identity创建的,存储用户信息的AspNetUsers表还包含配置文件信息,例如FullName,BirthDate和Bio作为单独的列。
User与Role是一种N:N的关系,在AspNetUserRoles表中存储User和Role之间的
关系(相关联记录的id).
注册的User也已被添加到了表中:
2.查看Startup.cs部分类启动文件:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
ConfigureAuth是其部分类Startup.Auth.cs中的方法:
在web.config文件中,有关其数据库连接:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-Identity_Demo-20200528061927.mdf;Initial Catalog=aspnet-Identity_Demo-20200528061927;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
把用户信息存储在应用程序的数据库中。
3.在Home控制器的About动作方法上添加角色控制:
[Authorize(Roles ="admin")]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
在Account控制器的Register注册动作方法中,添加如下代码,给当前注册用户添加相应的角色(Role):
if (result.Succeeded)
{
..........................................
UserManager.AddToRole(user.Id,"admin");//给当前用户添加"admin" 角色
...........................
}
测试案例:
注册成功后去查看数据库:
新的user已被添加
关系表中也生成了记录:
建立起N:N关系
一篇总结的十分详细的英文文章,可以去研究一下:
Securing ASP.NET MVC Applications with ASP.NET Identity