目录

介绍

身份验证和授权

身份验证

授权

背景

先决条件

使用代码

第1步:创建数据库

第2步:创建ASP.NET Core

更新appsettings.json

步骤3:在Startup.cs文件中添加Identity Service

第4步:注册并创建您的第一个用户

迁移

刷新数据库

第5步:创建角色并为角色分配用户

第6步:创建管理页面和设置授权

创建Admin控制器

设置授权

第7步:按用户角色显示隐藏菜单


Download ASPNETCoreUserIdentity - 1.5 MB  (建议按照文章自己先做)

介绍

在本文中,我们将详细介绍如何在MVC应用程序中使用ASP.NET Core Identity来创建用户角色并根据用户角色显示菜单。

在这里,我们将看到如何做:

  • 创建默认管理员用户
  • 创建默认管理员角色
  • 将未经身份验证的用户重定向到登录页面
  • 仅为授权管理员用户显示管理页面菜单

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

身份验证和授权

身份验证

检查有效用户。这里的问题是如何检查用户是否有效。当用户第一次访问网站时,他/她将注册该网站。他们所有的信息,如用户名,密码,电子邮件等都将存储在网站数据库中。当用户输入他/她的用户ID和密码时,将使用数据库检查信息。如果用户输入了与数据库中相同的用户ID和密码,则他或她是有效用户,并将被重定向到网站的主页。如果用户输入的UserID或密码与数据库不匹配,则登录页面将显示一条消息,例如“请输入有效的用户名或密码”。检查用户是否有效访问网站的整个过程称为身份验证。

授权

用户通过身份验证后,需要通过他/她的角色将其重定向到相应的页面。例如,当管理员登录时,则需要重定向到管理页面。如果会计师已登录,则需要将他/她重定向到其“帐目”页面。

背景

先决条件

确保已安装计算机中的所有先决条件。如果没有,那么一个接一个地下载并安装它们。

  1. 首先,从此链接下载并安装Visual Studio 2017
  2. SQL Server 2014或更高版本

使用代码

第1步:创建数据库

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

创建数据库:运行以下脚本以创建我们的数据库。

USE MASTER
GO-- 1) Check for the Database Exists .If the database is exist then drop and create new DB
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' )      DROP DATABASE InventoryDB;
GOCREATE DATABASE InventoryDB;
GOUSE InventoryDB
GO

运行数据库脚本后,我们可以看到已创建数据库并且尚未创建表。

第2步:创建ASP.NET Core

安装Visual Studio 2017后,单击“开始”,然后单击“程序”,选择“  Visual Studio 2017”——单击“  Visual Studio 2017”。单击New,然后单击Project,选择Web,然后选择  ASP.NET Core Web Application。输入您的项目名称并单击。

选择Web应用程序(模型-视图-控制器),然后单击“更改身份验证”。

选择个人用户帐户,然后单击确定以创建项目。

更新appsettings.json

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

"ConnectionStrings": {"DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;MultipleActiveResultSets=true"},

步骤3:在Startup.cs文件中添加Identity Service

默认情况下,在ASP.NET Core应用程序中,Identity Service将添加到Startup.cs文件中的 ConfigureServices方法中。您还可以在用户注册时另外添加密码强度,还可以使用以下代码设置默认登录页/注销页以及AccessDenaiedPath。

services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();//Password Strength Settingservices.Configure<IdentityOptions>(options =>{// Password settingsoptions.Password.RequireDigit = true;options.Password.RequiredLength = 8;options.Password.RequireNonAlphanumeric = false;options.Password.RequireUppercase = true;options.Password.RequireLowercase = false;options.Password.RequiredUniqueChars = 6;// Lockout settingsoptions.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);options.Lockout.MaxFailedAccessAttempts = 10;options.Lockout.AllowedForNewUsers = true;// User settingsoptions.User.RequireUniqueEmail = true;});//Setting the Account Login pageservices.ConfigureApplicationCookie(options =>{// Cookie settingsoptions.Cookie.HttpOnly = true;options.ExpireTimeSpan = TimeSpan.FromMinutes(30);options.LoginPath = "/Account/Login"; // If the LoginPath is not set here,// ASP.NET Core will default to /Account/Loginoptions.LogoutPath = "/Account/Logout"; // If the LogoutPath is not set here,// ASP.NET Core will default to /Account/Logoutoptions.AccessDeniedPath = "/Account/AccessDenied"; // If the AccessDeniedPath is// not set here, ASP.NET Core// will default to// /Account/AccessDeniedoptions.SlidingExpiration = true;});

下面是我们如何在ConfigureService方法中添加ASP.NET Core身份服务如下:

第4步:注册并创建您的第一个用户

现在,我们的ASP.NET Core Web应用程序已准备好供用户在我们的网站上注册,且用户也可以在注册后登录我们的系统。我们将通过在后续步骤中向用户添加角色来执行授权。构建并运行应用程序以注册您的第一个默认管理员用户。

单击注册链接注册我们的第一个用户。(PS:建议注册用户和下图一样,否则下面创建Admin角色时,其方法中的对应用户名改为您自行注册的也可。另一个问题,把Configure方法中最后一句注释掉,创建角色在下面的步骤中会介绍,但是在创建数据库表之前不需要——如果您用的此文提供的案例,否则不需要考虑。)

迁移

当我们点击“注册”按钮时,我们可以看到下面的页面。不要对这个页面感到恐慌,因为第一次运行我们需要进行迁移,只需单击Apply Migrations按钮。

我们可以看到确认为“已应用迁移”,然后单击“尝试刷新页面消息”。

刷新页面,我们可以看到新注册的用户已登录我们的网站。

刷新数据库

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

我们可以检查aspNetUsers表以查找新创建的用户详细信息。我们还可以看到ASPNetRoles并且ASPNetUserRoles没有记录,因为我们尚未为角色创建任何角色或添加用户。在下一步中,我们将添加一个新角色为“ Admin”,我们将新注册用户添加为Admin。

第5步:创建角色并为角色分配用户

我们使用以下方法创建一个新角色为“ Admin”,我们将最近注册的“ Admin” 分配给我们的网站。打开Startup.cs文件,并在你的Startup.cs文件中添加以下方法。

        private async Task CreateUserRoles(IServiceProvider serviceProvider){var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();IdentityResult roleResult;//Adding Admin Rolevar roleCheck = await RoleManager.RoleExistsAsync("Admin");if (!roleCheck){//create the roles and seed them to the databaseroleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));}//Assign Admin role to the main User here we have given our newly registered//login id for Admin managementApplicationUser user = await UserManager.FindByEmailAsync("syedshanumcain@gmail.com");var User = new ApplicationUser();await UserManager.AddToRoleAsync(user, "Admin");}

Startup.cs文件中,我们可以找到该Configure方法。从这个Configure方法调用我们的CreateUserRoles方法。当我们构建和运行应用程序时,我们可以看到在ASPNetRole表中将创建“Admin”的新角色 。

当我们构建并运行应用程序时,我们可以看到ASPNetRoles表中添加了新角色,并且我们可以看到我们的默认用户已被分配了 Admin角色。

第6步:创建管理页面和设置授权

现在我们有一个用于ASP.NET Core Web应用程序的Admin用户。下一步,让我们创建一个新页面并将此页面的授权设置为仅登录,仅管理员用户可以查看此页面。为此,我们创建了一个新命命名为Admin的Controller。

创建Admin控制器

右键单击Controller文件夹并单击Add New Controller,选择MVC Controller - Empty,然后单击Add。

输入您的Controller名称为Admin,然后单击Add。

在控制器中,右键单击Index,然后单击添加视图。单击“添加”按钮以创建视图页面。

我们可以看到我们的管理控制器和管理视图已创建。

打开Admin / Index.cshtml页面以根据需要进行设计。在这里,我添加了如下的简单文字:

接下来,我们创建一个新菜单以显示Admin Page。要创建新菜单,Views / Shared文件夹中打开_Layout.cshtml。添加如下图所示的菜单:

现在我们已经创建了管理页面,并为管理员添加了菜单。我们仅为Admin用户创建了此页面,其他用户或未登录的用户不应该看到此页面。如果我们运行我们的应用程序会发生什么。

我们可以看到新的菜单“Admin Page”已经创建,现在对所有人开放。这意味着任何人都可以单击该链接并查看该页面的内容。

在这里,我们可以看到,我们可以通过登录查看管理页面。

设置授权

为避免这种情况,我们在管理页面控制器中使用授权。打开我们的 Admin控制器并添加以下代码行:

[Authorize(Roles = "Admin")]
public IActionResult Index()
{return View();
}

如果我们运行我们的应用程序并单击Admin Page,它将自动重定向到Log in页面。

请注意,只有管理员角色成员才能查看管理页面,因为我们仅为管理员角色设置了授权。如果您想添加更多角色,我们可以使用逗号,如下面的代码:

 [Authorize(Roles = "Admin,SuperAdmin,Manager")]

第7步:按用户角色显示隐藏菜单

现在让我们更进一步的只显示登录管理员用户的管理员菜单。为此,我们从Views / Shared文件夹下打开Layout.cshtml并编辑新添加的菜单,如下面的代码。在这个代码中,首先我们检查用户是否已经过身份验证,意味着登录,然后我们检查用户是否具有查看菜单的授权。

<li>@if (User.Identity.IsAuthenticated){@if (User.IsInRole("Admin")){<a asp-area="" asp-controller="Admin" asp-action="Index">Admin Page</a>}}</li>

以下是我们的代码:

运行应用程序,默认情况下我们可以看到“Admin Page”不会显示在我们的顶层菜单中。仅登录管理员角色用户可以查看菜单。

让我们通过我们最初创建的管理员用户登录来试试这个。

登录后,我们可以看到管理员用户现在可以查看Admin Page菜单。

让我们尝试创建普通用户,因为我们现在在注册新用户。

注册后,我们可以看到,对于这个用户,我们没有添加“Admin&rdquorole”,他无权查看Admin Page。

参考链接:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?tabs=visual-studio%2Caspnetcore2x

原文地址:https://www.codeproject.com/Articles/1235077/Getting-Started-With-ASP-NET-Core-Identity-And-Rol

ASP.NET Core 2.0身份和角色管理入门相关推荐

  1. 使用依赖注入的ASP.NET Core 2.0用户角色基础动态菜单管理

    目录 介绍 背景 先决条件 使用代码 第1步 - 创建数据库 创建数据库 第2步 - 创建ASP.NET Core 更新appsettings.json 步骤3 - 在Startup.cs文件中添加I ...

  2. Asp.Net Core 2.0 多角色权限认证

    在使用 WebForm 技术开发网站的时候,微软就提供了 Form 身份认证,这使得登录认证简单了许多,不同于 WebForm 以及后来的 Asp.Net Mvc,Asp.Net Core 中的身份认 ...

  3. ASP.NET Core 3.0 gRPC 身份认证和授权

    一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...

  4. [翻译] ASP.NET Core 3.0 的新增功能

    全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0 本文重点介绍了 ASP.NET Core 3.0 中最重要的更改,并提供相关文档的连接. Blazor Bl ...

  5. asp.net core 2.0 web api基于JWT自定义策略授权

    JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端 ...

  6. ASP.NET Core 2.0 : 三. 项目结构

    ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...

  7. ASP.NET Core 5.0新增功能摘要

    .NET5.0发布了大半个月,从.NET Core3.1的平滑迁移体验令人心旷神怡,改个targetframework就完成迁移,不要太轻松!然而,ASP.NET Core5.0也有很多有意思的改变, ...

  8. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

  9. ASP.NET Core 3.0预览版体验

    目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...

最新文章

  1. 科室鄙视链最底端,居然是这类人
  2. python拿什么做可视化界面好-用python打造可视化爬虫监控系统,酷炫的图形化界面...
  3. 提交显示成功但是没有看到文件_如何向RTThread提交一个BSP?
  4. 用instrument的僵尸工具
  5. python面试题之如何用Python找出你目前在哪个目录?
  6. 如何用计算机管理员权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
  7. openjudge-1664 放苹果
  8. css空心半圆的实现,css – 透明空心或切出圆
  9. 基于Halcon学习的二维码识别【六】pdf417_bottle.hdev
  10. 微观经济学案例分析(八)
  11. word打印机显示服务器脱机,教你怎样解决打印机脱机打印-word资料(精).docx
  12. CocosCreator之绳索摆动效果
  13. 与“鸡”对话的时代孤独
  14. Android 10去除电池图标以及设置
  15. google 身份验证器 谷歌服务器,整整10年!谷歌身份验证器终于带来数据转移服务 不用挨个解绑取消啦...
  16. Bt656的数据格式
  17. 最全小说资源网——连载阅读升级版(亲测好用)
  18. 7个最好的Java机器学习开发库
  19. window.postMessage - 前端跨域通信
  20. 实验报告幻方,数组的排序和向数组中插入某个数

热门文章

  1. prometheus命令_Prometheus+Grafana 基础及简单搭建
  2. common java socket,JAVA I/O(四)网络Socket和ServerSocket
  3. 设计灵感|时尚潮流品牌如何通过网页设计呈现
  4. 2020移动应用设计流行素材|交互动画
  5. 设计PSD分层素材模板|几何元素平面广告,在设计风格中占有一席之地
  6. UI实用干货素材|工作管理、日程日历专辑
  7. linux下amd超频工具,AMD锐龙超频民间工具Work Tool:可单独超CCX模块
  8. vmware磁盘扩容_CentOS7扩容分区(LVM)
  9. CALLING PROCEDURES USING CALL AND RET
  10. 对POSIX和SystemV消息队列优化:用户态消息队列