博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net core系列 52 Identity 其它关注点
阅读量:6420 次
发布时间:2019-06-23

本文共 3180 字,大约阅读时间需要 10 分钟。

一.登录分析

  在使用identity身份验证登录时,在login中调用的方法是:

  var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

  跟踪查看源码,源码下载 这里有core源码的不同版本,在vs 2017下只能加载2.2及以下的版本。

  下面是登录的大概步骤:

  (1) 检查用户名是否存在(UserManager.cs在Microsoft.AspNetCore.Identity.core源码中)

    var user = await UserManager.FindByNameAsync(userName);

  (2) UserManager类来检查用户名和密码是否存在

    UserManager.CheckPasswordAsync(user, password)

  (3) 登录,isPersistent是指浏览器关闭后登录cookie是否应该保持,如果是true则永久保存cookie,如果为false则使用services.ConfigureApplicationCookie中options.ExpireTimeSpan 来重写。SignInOrTwoFactorAsync(user, isPersistent)方法最终调用SignInAsync进行登录。

public virtual async Task SignInAsync(TUser user, AuthenticationProperties authenticationProperties, string authenticationMethod = null)        {            var userPrincipal = await CreateUserPrincipalAsync(user);            // Review: should we guard against CreateUserPrincipal returning null?            if (authenticationMethod != null)            {                userPrincipal.Identities.First().AddClaim(new Claim(ClaimTypes.AuthenticationMethod, authenticationMethod));            }            await Context.SignInAsync(IdentityConstants.ApplicationScheme,                userPrincipal,                authenticationProperties ?? new AuthenticationProperties());        }

    AuthenticationProperties:用来存储身份认证会话

    IdentityConstants:是配置Identity系统使用的cookie中间件的所有选项, ApplicationScheme属性是指:该方案运用于Identity应用程序的cookies(默认方案)。如下所示:

private static readonly string CookiePrefix = "Identity";          public static readonly string ApplicationScheme = CookiePrefix + ".Application"

    登录涉及到三个类ClaimsPrincipal(声明当事人)、ClaimsIdentity(声明标识)、Claim(声明)。

    Claim:是名称值对,比如名称ClaimType:身份证, 值ClaimValue:18位号码。

    ClaimsIdentity:一组Cliams 就构成了一个Identity标识。

    ClaimsPrincipal:当事人可以持有多个ClaimsIdentity标识。

    最后SignInAsync 创建一个加密的 cookie,并将其添加到当前响应。

 

二.注销

  若要注销(退出登录)当前用户,然后删除其 cookie,需要调用SignOutAsync 。

await HttpContext.SignOutAsync();

 

三. Identity表管理

  3.1可以使用UserManager类和RoleManager类来管理Identity表,可以参考"",下面是声明的新增方法

//添加用户声明 Microsoft.AspNetCore.Identity.UserManager
public virtual Task
AddClaimAsync(TUser user, Claim claim) //添加角色声明 Microsoft.AspNetCore.Identity.RoleManager
public virtual async Task
AddClaimAsync(TRole role, Claim claim)

  3.2 在UserManager下,会发现很多方法,都是传入ClaimsPrincipal参数,如下所示:

//获取用户ID    GetUserId(ClaimsPrincipal principal)    //获取用户    Task
GetUserAsync(ClaimsPrincipal principal)

    可以通过如下来转换成ClaimsPrincipal:

    ClaimsPrincipal principal = HttpContext.Current.User as ClaimsPrincipal;

  3.3 Claim声明类

    声明值Value:对于简单的声明值可以使用字符串存储,更复杂的值类型,建议使用标准的 XML (或json)架构类型,在应用程序端序列化和反序列化。

    声明类型Type:标识值的类型信息。

    其它属性, 如定义颁发声明等,。

    

四.不使用identity系统进行身份认证

  如果开发想自定义用户表,角色表等,完全抛弃identity系统,实现参考"

  

五. Identity扩展

  (1) 如果想使用不同数据访问方法,不使用默认的EF Core。

  (2) 如果不想使用 SQL Server存储用户信息,想使用其它数据存储。

  (3) 对Identity表想使用不同的结构。

  实现参考"”

    

六. Identity配置

  对于 ASP.NET Core Identity设置,例如密码策略、 锁定和 cookie 配置使用默认值等。参考文档 ""

    

七. 帐户确认和 ASP.NET Core 中的密码恢复

    

    

转载于:https://www.cnblogs.com/MrHSR/p/10681459.html

你可能感兴趣的文章
IBM存储部门换了新老板:还是6年前那个
查看>>
IBM公司公布三层单元PCM-MLC,向3DX堆栈方案发起挑战
查看>>
《2040大预言:高科技引擎与社会新秩序》—— 导读
查看>>
数据库操作:添加、插入、更新语句
查看>>
降低数据中心能源消耗
查看>>
《Python Cookbook(第3版)中文版》——1.8 与字典有关的计算问题
查看>>
《提高转化率!网页A/B测试与多变量测试实战指南》一2.5 勇气与责任心
查看>>
深入实践Spring Boot3.2 控制器设计
查看>>
《微信小程序:开发入门及案例详解》—— 导读
查看>>
降低JRuby的内存占用的可能方法
查看>>
如何创建和使用Python CGI脚本
查看>>
RHCSA 系列(九): 安装、配置及加固一个 Web 和 FTP 服务器
查看>>
《jQuery、jQuery UI及jQuery Mobile技巧与示例》——3.7 示例:添加函数的返回结果...
查看>>
并发集合(一)引言
查看>>
如何写gdb命令脚本
查看>>
Android ListView展示不同的布局
查看>>
oracle 表(下)
查看>>
iOS宏(自己使用,持续更新)
查看>>
手把手玩转win8开发系列课程(3)
查看>>
NGINX引入线程池 性能提升9倍
查看>>