主要参考:

Introduction to Identity on ASP.NET Core

Start by command

dotnet new webapp --auth Individual -uld -o WebApp1

new webapp 是做一个 razor page

--auth Individual 表示要包含 Identity Framework (简称 Identity)

-uld 是 use local database (本地数据库, 默认是用 SQLite)

-o WebApp1 是 output 项目名字

运行上面 command 后, 所有代码就写好了. 它是搭配 EF Core 的. 所以接下来通过 EF Migration 创建数据库.

dotnet ef database update

在 privacy 页面放上 [Authorize] 标签就可以跑了.

Scaffold Identity

参考: Scaffold Identity in ASP.NET Core projects

之所以几行 command 就可以跑起来, 那是因为 ASP.NET Core 对 Identity 做了一个封装, 这个封装还包括了 View (这个技术叫 Razor Class Library 简称 RCL)

我们来从一个 Web App 没有 authen 的做起.

先装好 global 工具

dotnet tool install -g dotnet-aspnet-codegenerator
// 做一个新项目, 没有 authentication 的
dotnet new webapp -o ScaffoldIdentity // 进入项目 folder
cd ScaffoldIdentity // 装 package
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.UI
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools // generate Identity code template
dotnet aspnet-codegenerator Identity --useDefaultUI // 做数据库
dotnet ef migrations add CreateIdentitySchema
dotnet ef database update

跑完上面的 command 后, 在 startup 添加 UseAuthentication

然后 layout view 添加 _LoginPartial, 就可以了.

当然这个只是演示让, 让我们知道它是怎样 work 的, 真实开发还是差很多的. 之后慢慢讲.

这里有几个 point 可以记入一下.

在 IdentityHostingStartup.cs 里面封装了 service 的调用, 所以我们在 startup 看不到,

然后所有的 view 都是看不见 source code 的.

除非在我们声明时加入 --files (把指定要的 file 调出来) 或者拿掉 --useDefaultUI 那么所有的 source code 才会显示出来 (这正是我们需要的, 不然怎么魔改呢?)

Identity Overview

既然 Scaffold 帮我们搞了这么多代码, 那我们一个一个来看看 Identity 的代码是如何工作的。要魔改自然要先摸清楚它底细.

首先是 Entity

public class ScaffoldIdentityIdentityDbContext : IdentityDbContext<IdentityUser>
{
public ScaffoldIdentityIdentityDbContext(DbContextOptions<ScaffoldIdentityIdentityDbContext> options)
: base(options)
{
} protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}

把平常的 DbContext 继承了 IdentityDbContext

Identity 封装了许多的 Entity, 比如 IdentityUser, IdentityRole, IdentityLogin 等等, 有了这些, 数据库就搞定了.

AspNetUsers = user table

AspNetUserClaims = user 的 claims

AspNetUserLogins = user 的 external logins

AspNetRoles = role table

AspNetRoleClaims = role 的 claims

AspNetUserRoles = user 和 role 的关系

AspNetUserTokens = 暂时不清楚

Role 和 Claims 都是用来做 autho 的, 之后会讲到

接下来就是 Startup 的 service provide

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ScaffoldIdentityIdentityDbContext>();

源码在这里

2 年前我超讨厌看 .NET 源码, 东一个西一个, 幸好现在全部放一起了.

这些源码最好都稍微看一下,因为大部分情况我们是需要修改的.

AddDefaultIdentity

IdentityServiceCollectionUIExtensions.cs

services.AddAuthentication 是 ASP.NET Core authen 的 service 哦

AddIdentityCookies

IdentityCookiesBuilderExtensions.cs

里面负责了 cookie schemes 的代码

AddIdentityCore

IdentityServiceCollectionExtensions.cs

负责UserManger 之类的

AddDefaultUI

IdentityBuilderUIExtensions.cs

负责 Ui 的咚咚, SignInManager 也在这里

AddDefaultTokenProviders

IdentityBuilderExtensions.cs

Email, Phone reset password 这些 token 的做法

还有一个 AddIdentity

IdentityServiceCollectionExtensions.cs

这个是以前还没有 AddDefaultIdentity 的时候的调用, 如果现在没有要 DefaultUI 也是会用回 AddIdentity + AddDefaultTokenProviders

注: AddDefaultUI 会有 Error Page 哦, 可能破坏 router, 除非你真的要, 不然建议不适用它.

整个过程就是, 你要什么就拿什么来用, 或拿来改就是了, 最重要的是全部过一遍, 知道它都搞了些什么.

Identity – Introduction & Scaffold的更多相关文章

  1. 000.Introduction to ASP.NET Core--【Asp.net core 介绍】

    Introduction to ASP.NET Core Asp.net core 介绍 270 of 282 people found this helpful By Daniel Roth, Ri ...

  2. Discrete.Differential.Geometry-An.Applied.Introduction(sig2013) 笔记

    The author has a course on web: http://brickisland.net/DDGSpring2016/ It has more reading assignment ...

  3. A.Kaw矩阵代数初步学习笔记 1. Introduction

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  4. Security » Authentication » Identity介绍

    Introduction to Identity¶ By Pranav Rastogi, Rick Anderson, Tom Dykstra, Jon Galloway and Erik Reita ...

  5. [转]DCM Tutorial – An Introduction to Orientation Kinematics

    原地址http://www.starlino.com/dcm_tutorial.html Introduction This article is a continuation of my IMU G ...

  6. TIJ——Chapter One:Introduction to Objects

    ///:~容我对这个系列美其名曰"读书笔记",其实shi在练习英文哈:-) Introduction to Objects Object-oriented programming( ...

  7. Core Java Volume I — 4.1. Introduction to Object-Oriented Programming

    4.1. Introduction to Object-Oriented ProgrammingObject-oriented programming, or OOP for short, is th ...

  8. Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)

    1, http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c 2, Introduction ...

  9. Introduction to the POM

    原文:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html Introduction to the POM ...

  10. asp.net core系列 46 Identity介绍

    一. Identity 介绍 ASP.NET Core Identity是一个会员系统,可为ASP.NET Core应用程序添加登录功能.可以使用SQL Server数据库配置身份以存储用户名,密码和 ...

随机推荐

  1. 使用 @Audited 增强Spring Boot 应用程序的数据审计能力

    介绍 在Spring Boot开发的动态世界中,确保数据完整性和跟踪变化是至关重要的.实现这一目标的一个强大工具是@Audited注解.本文深入探讨了该注解的复杂性.其目的.实现步骤以及如何利用其功能 ...

  2. Qt+OpenCascade开发笔记(二):windows开发环境搭建(二):Qt引入occ库,搭建基础工程模板Demo和发布Demo

    前言   Open CASCADE是由Open Cascade SAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计.它是一个面向对象的C++类库,提供了丰富的几何造型.数据交换和 ...

  3. Jmeter函数助手25-log

    log函数用于记录一条日志并返回其值. String to be logged (and returned):函数会返回该值.控制台也能看到该字符 Log level (default INFO) o ...

  4. 代码随想录Day2

    209.长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 $ [nums_l, nums_{l+1} ...

  5. 图书《数据资产管理核心技术与应用》核心章节节选-3.1.2. 从Spark 执行计划中获取数据血缘

    本文节选自清华大学出版社出版的图书<数据资产管理核心技术与应用>,作者为张永清等著. 从Spark 执行计划中获取数据血缘 因为数据处理任务会涉及到数据的转换和处理,所以从数据任务中解析血 ...

  6. 【Server】对象存储OSS - Minio

    官方文档: https://docs.min.io/docs/minio-quickstart-guide.html 看中文文档CV命令发现下不下来安装包,应该是地址问题 单击搭建非常简单,只有三个步 ...

  7. 【MySQL】MGR高可用搭建

    MySQL8.0.27如何安装 https://www.cnblogs.com/mindzone/p/15450312.html 部署过程中各种问题可参考的解决方案 我遇见的搭建问题,解决方案参考下面 ...

  8. blender建模渲染Tips

    blender渲染 灯光的三种方式 1,常规灯光:shift+A选择灯光. 2,世界环境光:右侧地球图标调整. 3,物体自发光:把渲染物体变成一个发光体来进行调节灯光. 渲染视窗的调节 ctrl+b裁 ...

  9. 区块链DApp学习开发入门 视频

    学习视频: https://www.bilibili.com/video/BV13E411P7km?p=1 https://www.bilibili.com/video/BV14z4y1Z7Jd?p= ...

  10. 3.2.0 版本预告!远程日志解决 Worker 故障获取不到日志的问题

    Apache DolphinScheduler 3.2.0 版本已经呼之欲出,8 月 中下旬,这个大版本就要和用户见面了.为了让大家提前了解到此版本更新的主要内容,我们已经制作了几期视频和内容做了大致 ...