当前位置: 首页 > news >正文

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

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: "123456");
}

上回有提到过, 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: "123456", newPassword: "654321");
}

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 属性 (这个就很重要,用户属性每个项目都不一样的丫)

这个之后再讲. 

 

总结 : 

太短不总结. 

 

转载于:https://www.cnblogs.com/keatkeat/p/10783171.html

相关文章:

  • 【题解】四色定理
  • Android 实现动态背景“五彩蛛网”特效,让你大开眼界!
  • python高并发?
  • 雷林鹏分享:二级目录配置CI应用
  • Sym System Recovery 2013 ( 備份 操作 )
  • iOS-在项目中引入RSA算法
  • 简单的数学题
  • 关于JS引擎优化的理解
  • 如何优雅的备份账号相关信息
  • mybatis学习总结
  • 全球首个大规模光电芯片到来
  • 1.4T的mysql表删除
  • MYSQL-SELECT查
  • css 浮动的时候如何,div进行居中
  • 大文件如何传输,大文件的传输方式有哪些?
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CentOS7简单部署NFS
  • css选择器
  • flutter的key在widget list的作用以及必要性
  • java2019面试题北京
  • JS变量作用域
  • markdown编辑器简评
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月16日 DApp数据排行榜
  • win10下安装mysql5.7
  • 阿里云Kubernetes容器服务上体验Knative
  • 从零搭建Koa2 Server
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 理清楚Vue的结构
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 阿里云ACE认证之理解CDN技术
  • 数据可视化之下发图实践
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​卜东波研究员:高观点下的少儿计算思维
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (14)Hive调优——合并小文件
  • (6)添加vue-cookie
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (六)vue-router+UI组件库
  • (论文阅读30/100)Convolutional Pose Machines
  • (生成器)yield与(迭代器)generator
  • (十八)SpringBoot之发送QQ邮件
  • (五)网络优化与超参数选择--九五小庞
  • (一)Linux+Windows下安装ffmpeg
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (状压dp)uva 10817 Headmaster's Headache
  • ***测试-HTTP方法
  • .net core Swagger 过滤部分Api
  • .net 按比例显示图片的缩略图
  • .NET 反射的使用
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net 应用中使用dot trace进行性能诊断