register -> login 讲了

我们来讲讲 forgot password -> reset password  和 change password 吧

先来 forgot password

public async Task OnPostResetPassword(
[FromServices] UserManager<IdentityUser> userManager
)
{
var user = await userManager.FindByNameAsync("hengkeat87@gmail.com");
var token = await userManager.GeneratePasswordResetTokenAsync(user);
await userManager.ResetPasswordAsync(user, token, newPassword: "");
}

上回有提到过, identity 用于 reset password 的 token 是长长, 所以只能发电子邮件给用户了.

接着就是设定新密码。

change password 是这样

public async Task OnPostChangePassword(
[FromServices] UserManager<IdentityUser> userManager
)
{
var user = await userManager.FindByNameAsync("hengkeat87@gmail.com");
await userManager.ChangePasswordAsync(user, currentPassword: "", newPassword: "");
}

identity 在 change password 时必须提供旧的密码才行. 这是比较 standard 的安全机制.

那么如果项目是后台管理系统的话,往往 super admin 会有权限可以直接修改普通 admin 的密码, 这种情况下,我们应该采用 reset password 的方式去进行.

登出是这样

public async Task OnPostLogout(
[FromServices] SignInManager<IdentityUser> signInManager
)
{
await signInManager.SignOutAsync();
}

到这里一个基本的流程算是走完了.

register -> confirm email -> forgot & reset password -> login -> change password -> logout

除了上面说的, identity 还有几个我觉得也很重要的东西.

- two factor (在我接触过的网站中, 有使用 two factor 的只有银行转账. 而且银行转账几乎是每一笔操作都需要一个 token, 然而 identity 的 two factor 是用于登入而已, 感觉也不适用. 再者我也没有接银行项目的可能, 所以暂时就不研究先了)

- facebook login (third party account login)

这个是一个很方便的功能, 用户不必注册,直接使用 facebook 账户登入.

早期是使用 oauth 2.0 来实现,目前应该是 OIDC Open ID Connect

以前我花过不少时间去搞这个东西,后来发现手机年代, 用户是用 facebook app 登入的, 手机并没有 facebook 网站的登入. 也就是说如果项目使用这个 facebook login, 用户依然需要登入 facebook

而大部分用户根本不记得密码.. 所以这个功能后来,我也就放弃了,况且网站还要依赖于 facebook api 需要长久维护也很麻烦。

- 如果不用 identity,asp.net core 底层支持权限管理吗 ?

参考 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-3.0

我们来看看这篇文章

startup service

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
...
});

startup app

app.UseAuthentication();

sign in

var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("FullName", user.FullName),
new Claim(ClaimTypes.Role, "Administrator"),
}; var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties
{ }; await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);

拿开 register, set password 这些东西, 一个权限管理的核心就是上面几个东西而且.

系统发出 claim 给用户, 用户请求时附带 claim, 系统依据 claim 来判断可否进行操作.

之后的变法都是从这几个流程开始的,

系统要发 claim 之前要确认用户, 就要有个登入动作 username, password 或则 facebook login

是发 cookie 还是 access token ?  使用 data protection 加密还是用数字签名 ?

claim 的判断是基于 role based (role base 又可以有很多变种) 还是 policy based 等等.

- 扩展 user 属性 (这个就很重要,用户属性每个项目都不一样的丫)

这个之后再讲.

总结 :

太短不总结.

Asp.net core Identity + identity server + angular 学习笔记 (第三篇)的更多相关文章

  1. Asp.net core Identity + identity server + angular 学习笔记 (第五篇)

    ABAC (Attribute Based Access Control) 基于属性得权限管理. 属性就是 key and value 表达力非常得强. 我们可以用 key = role value ...

  2. Asp.net core Identity + identity server + angular 学习笔记 (第四篇)

    来说说 RBAC (role based access control) 这是目前全世界最通用的权限管理机制, 当然使用率高并不是说它最好. 它也有很多局限的. 我们来讲讲最简单的 role base ...

  3. Asp.net core Identity + identity server + angular 学习笔记 (第一篇)

    用了很长一段时间了, 但是一直没有做过任何笔记,感觉 identity 太多东西要写了, 提不起劲. 但是时间一久很多东西都记不清了. 还是写一轮吧. 加深记忆. 这是 0-1 的笔记, 会写好多篇. ...

  4. Asp.net core Identity + identity server + angular 学习笔记 (第二篇)

    先纠正一下第一篇的的错误. 在 Login.cshtml 和 Login.cshtml.cs 里, 本来应该是 Register 我却写成 Login . cshtml 修改部分 <form a ...

  5. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  6. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  7. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

  8. angular学习笔记(三)

    1.安装npm install --save @angular/material@2.0.0-beta.72.安装http://chrome-extension-downloader.com安装aug ...

  9. Angular 学习笔记(三)

    调试时抓取作用域: 1.右键选取审查元素,调出 debugger(或按 F12) 2.调试器允许用变量 $0 来获取当前选取的元素 3.在 console 中执行 angular.element($0 ...

随机推荐

  1. leetcode148. Sort List

    和数组里面的归并排序相同,用两个指针分别对应low high,递归进行归并排序然后merge把两个链表合在一起 /** * Definition for singly-linked list. * s ...

  2. ASP.NET MVC案例教程(六)

    ASP.NET六 一个小难题 我们继续完善“MVC公告发布系统”,这次,我们的需求是对公告发布功能添加日志记录能力,即在发布公告前,记录一次,在公告发布成功后,再记录一次.然后还要使得其具备异常处理, ...

  3. redis 有序集合(zset)函数

    redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...

  4. 从Node到Go的心路之旅

    我最近将一个系统从Node重构到了Go,花了大概两周多的时间,这个过程也是不得已而为之,因为公司开发的系统最终需要部署到客户的服务器,而又不想暴露源码. 但是NodeJs开发的系统却无法从根本上来保护 ...

  5. python反反爬,爬取猫眼评分

    python反反爬,爬取猫眼评分.解决网站爬取时,内容类似:$#x12E0;样式,且每次字体文件变化.下载FontCreator . 用FontCreator打开base.woff.查看对应字体关系 ...

  6. Original Autel MaxiSys Pro MS908P support 2 Year Free Update Online

    You can get 2 Year Free Update Online once you place an order on Autel MS908P. Software Version: Eve ...

  7. babel 7.x 和 webpack 4.x 配置vue项目

    很偶然的今天想开个自己的小项目,记录一下最近项目工程上实现的一个小交互.按照之前运行非常流畅的配置走一遍,打包遇到各种坑.只好根据命令行的报错逐个排查,发现babel升级了一个大版本,已经到7.x了. ...

  8. [最新]ABP ASP.NET Zero v5.5.2 破解

    参考https://www.cnblogs.com/xajh/p/8428818.html后, 搞定了Abp.AspNetZeroCore.dll.Abp.AspNetZeroCore.Web.dll ...

  9. Xgboost_sklearn代码Demo

    Demo: 显示特征的重要程度:图形化展示: from numpy import loadtxt from xgboost import XGBClassifier from xgboost impo ...

  10. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化

    LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...