美文网首页
asp.net core系列 52 Identity 其它关注点

asp.net core系列 52 Identity 其它关注点

作者: 懒懒的程序员一枚 | 来源:发表于2019-07-05 17:27 被阅读0次

    一.登录分析

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

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

    跟踪查看源码,源码下载https://github.com/aspnet/AspNetCore/releases 这里有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表管理

    相关文章

      网友评论

          本文标题:asp.net core系列 52 Identity 其它关注点

          本文链接:https://www.haomeiwen.com/subject/fyxshctx.html