@

初识Identity并添加身份验证管理页面

前言

使用ASP.NET Core2.2创建WebApp这篇教程中,我们使用dotnet new命令创建了一个没有身份验证管理的WebApp,通常情况下是无法满足我们对敏感页面控制的要求,典型的安全使用场景就是后台管理。

在这一篇中,我们将通过命令尝试:

  1. 了解ASP.NET Core Identity
  2. 使用命令创建带有身份验证的WebApp;
  3. 在项目文件夹中找不到身份验证管理的相关页面;
  4. 通过命令使用基架添加身份验证管理文件;
  5. 消除错误,然后run起来;

什么是ASP.NET Core Identity

ASP.NET Core 安全性概述

通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性。 ASP.NET Core 的功能包括管理身份验证、授权、数据保护、HTTPS 强制、应用机密、请求防伪保护及 CORS 管理。 通过这些安全功能,可以生成安全可靠的 ASP.NET Core 应用。

ASP.NET Core 安全性功能

ASP.NET Core 提供许多用于保护应用安全的工具和库(包括内置ASP.NET Core Identity标识提供程序),但也可使用第三方标志服务(如微信、 Facebook、Twitter 或 LinkedIn)。 利用 ASP.NET Core 可以轻松管理应用机密,无需将机密信息暴露在代码中就可存储和使用它们。

身份验证 vs 授权

身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统、数据库、应用或资源中的凭据进行比较。 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作。 授权指判断允许用户执行的操作的过程。

对身份验证的另一种理解是将其看作进入某一空间(如服务器、数据库、应用或资源)的方式,而将授权看作用户可对该空间(服务器、数据库或应用)内的对象执行的操作。

创建带有身份验证的WebApp

新建文件夹Prehot,并在此文件夹中打开命令界面,然后输入以下命令:

dotnet new webapp --auth Individual

对命令还不熟悉的朋友,可以查看尝试:使用--help获取dotnet命令的更多帮助

尝试运行

我们可以尝试run起来,开始运行!

一切OK!

检查解决方案中的项目文件

发现问题

如上图,用于身份注册、登录、管理的页面在哪里呢?

在这里我们重新明确一下:

ASP.NET Core Identity是一个成员身份管理系统,将登录功能添加到 WebApp中。利用这套管理系统,能够非常容易、方便的做到:

  • 创建一个帐户等,或也可以使用外部登录提供程序,比如受支持的外部登录提供程序包括微信、QQ、Facebook、 Google、 Microsoft 帐户和 Twitter。
  • 我们可以存储登录信息,例如使用 SQL Server 数据库来存储用户名、 密码和配置文件数据。或者,可用别的的持久存储区,例如,Azure 表存储。

以上我们了解ASP.NET Core Identity的概念后,回头再看看我们的项目:

  • 我们的项目使用dotnet new webapp --auth Individual这条命令创建了带有身份验证的WebApp(注意参数auth和Individual);
  • 尝试运行,用户注册、登录和退出,一切OK!
  • 但是检查解决方案我们并没有找到相关用户注册、登录、退出等页面文件呢;

原因

从 ASP.NET Core 2.1 及更高版本开始,将ASP.NET Core Identity 作为 Razor类库(Razor Class Library,RCL)的一部分进行提供,所以当你运行这些注册、登录、退出等相关操作的时候,都是RCL提供的默认模板完成的。

大家一定会提出,那如果我想完成更多的控制,比如修改登录界面、汉化等又怎么办呢?

解决问题

我们知道问题得原因,就好办了!

如果以前未安装 ASP.NET Core 基架,请立即进行安装:

dotnet tool install -g dotnet-aspnet-codegenerator

添加到包引用Microsoft.VisualStudio.Web.CodeGeneration.Design到项目 (*.csproj) 文件。 在项目目录中运行以下命令:

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet restore

注意下图中高亮的2个位置

运行以下命令,以列出标识基架更多选项:

dotnet aspnet-codegenerator identity -h

在项目文件夹中,运行所需的选项标识基架。 例如,若要设置默认值 UI 标识和最小的文件数,运行以下命令。 使用数据库上下文的正确完全限定的名称:

dotnet aspnet-codegenerator identity --useDefaultUI
//dotnet aspnet-codegenerator identity -dc Prehot.Data.ApplicationDbContext --files Account.Register

注意所在的命名空间,Prehot是你的项目名称

使用分号作为命令分隔符, 例如:

dotnet aspnet-codegenerator identity -dc Prehot.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout"

如果未指定运行标识基架--files标志或--useDefaultUI标志,所有可用的标识 UI 页将在项目中创建。

在本项目中,我们选择利用基架添加所有可用Identity的UI页面:

dotnet aspnet-codegenerator identity -dc Prehot.Data.ApplicationDbContext

新增的文件

我们的解决方案中会增加一个文件夹Areas,内容包括:

最后让我们跑起来

run起来,开始运行!

初识Identity并添加身份验证管理页面的更多相关文章

  1. ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证

    ASP.NET Identity除了提供基于Cookie的身份验证外,还提供了一些高级功能,如多次输入错误账户信息后会锁定用户禁止登录.集成第三方验证.账户的二次验证等,并且ASP.NET MVC的默 ...

  2. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

  3. Asp.Net WebApi 使用OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联(No OWIN authentication manager is associated with the request)” 异常的解决办法

    在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. ...

  4. ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

    上篇文章介绍了ASP.NET中身份验证的机制与流程,本文将使用代码的来介绍如何实现第三方账户验证与双因子验证. 本章主要内容有: ● 实现基于微软账户的第三方身份验证 ● 实现双因子身份验证 ● 验证 ...

  5. Ruby学习笔记7: 添加身份验证(adding Authentication)

    我们已经完成了Category & Product页面内容的增删改查,再加入一个身份验证即可成为一个较完整的Rails App了.本文就来完成这个任务. We now need to give ...

  6. 为WebService添加身份验证的两种方法

    方法一:SoapHeader 辅助类:MySoapHeader //SoapHeader 添加引用 using System.Web.Services.Protocols; #region 配置登录标 ...

  7. 《Apache服务用户身份验证管理》RHEL6.3

    1.安装apache软件包 Yum install httpd 2.启动apache服务 /etc/init.d/httpd restart 3.创建一个目录,内编辑一个index.html文件 4. ...

  8. 证明你是你——快速开启Windows Azure多重身份验证

    中国版Windows Azure的多重身份验证(Multi-Factor Authentication)功能已经开放.这个功能说白了就是要“证明你是你”.目前可以支持以下几种验证方式: 手机,短信验证 ...

  9. ASP.NET没有魔法——ASP.NET 身份验证与Identity

    前面的文章中为My Blog加入了文章的管理功能(ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块),但是管理功能应该只能由“作者”来访问,那么要如何控制用户的访问权限?也 ...

随机推荐

  1. Intellij idea 系列教程之常用配置项

    Intellij idea 系列教程之常用配置项 Intellij idea 系列教程目录(https://www.cnblogs.com/binarylei/p/10347600.html) Lan ...

  2. 实现SQL express版做自动备份数据库的方法

    SQL Server 2005/2008 Express版没有代理组件,不支持维护计划.可以采用下面的办法实现每日备份: 一.在要备份的数据库中创建存储过程. 存储过程名称:sp_BackupData ...

  3. Web应用获取文件路径的方法

    拥有 HttpServletRequest req 对象 req.getSession().getServletContext().getRealPath("/")   ----- ...

  4. 【Linux】percona-toolkit工具包的安装

    一.检查和安装与Perl相关的模块 PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境. 依赖包检查命令为: rpm -qa perl-DBI perl-DBD-MySQL perl ...

  5. 全球IT经理一致喜爱的ITSM系统、it服务台软件

  6. Python之生成器及内置函数篇4

    一.可迭代对象 #1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 #2.可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象 #3.迭代 ...

  7. 【转】利用virtualenv管理Python环境

    virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ...

  8. 2019.01.24 bzoj2310: ParkII(轮廓线dp)

    传送门 题意简述:给一个m*n的矩阵,每个格子有权值V(i,j) (可能为负数),要求找一条路径,使得每个点最多经过一次且点权值之和最大. 思路:我们将求回路时的状态定义改进一下. 现在由于求的是路径 ...

  9. 2018.10.24 NOIP模拟 小 C 的序列(链表+数论)

    传送门 考虑到a[l],gcd(a[l],a[l+1]),gcd(a[l],a[l+1],a[l+2])....gcd(a[l]...a[r])a[l],gcd(a[l],a[l+1]),gcd(a[ ...

  10. java常用设计模式总览

    一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...