Abp里面的账户模块 小笔记

1.账户模块的介绍

账户模块作为Abpvnext的一个业务模块,指的就是为系统提供 登录/注册功能的模块

目的:在系统中确定用户的身份; 身份代表着用户的身份证 使用身份保证系统的安全  用户不等于身份 使用身份就是用来区分不同的用户

2.账户模块的集成

当你使用的不是ABPcli创建的项目时 你需要手动在应用层 应用共享层 httpapi层 web层 引入Nuget 并在module中加载对应模块包

 

 

 为何没有Domain Abp中的身份模块 他依赖的是用户的领域

在用户模块中 仅仅只有三个api 用户注册 以及重置密码和发送获取密码重置时的验证码

 

以及登陆相关

 

 

 登陆Api:

1.验证用户信息是否为空

2.对比用户名/邮箱和密码是否正确 --》查询DB---》换取tooken

 2.1 :具体实现.NET5 Identity/Core/MIC肉松饭团。AspNetCOre.Identity  PasswordSingnInAsync

  2.1.1:检查用户名是否为空

  2.1.2:检查登陆密码是否正确

 2.2:登陆成功检查后通过Claims包装 调用SinginWithClaimsAsunc

 

 最终被包装为 userPrincipal (身份证)

 

 

 

 

 2.3:最终使用此身份证 在源码 /Http/Authentication.Core/AuthenticationService  SingInAsync方法实现登陆

   2.3.1:通过此方法选择不同类型生成身份证的方案并调用 IAuthenticationSingInHandler中的SingInAsync 具体配置在 Host项目中

 

2.3.2:IAuthenticationSingInHandler.SingInAsync

  2.3.2.1:基本校验

  2.3.2.2:创建身份证

 

 

  2.3.2.3:存储身份证session

 

 

   2.3.2.4:加密成为token 并发送登陆成功

 总结;登陆账号密码 发送---》检查成功--》包装为userPrincipal  通过选择包装令牌 发送成功消息

3.成功后写入登陆成功表securityLogs

再此我还想啰嗦一下Cookie Session token jwt的区别

什么是 Cookie

  • HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。
  • cookie 存储在客户端: cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
  • cookie 是不可跨域的: 每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)。

什么是 Session

    • session 是另一种记录服务器和客户端会话状态的机制
    • session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中

而Token:

               是令牌,访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。

而Jwt:

    将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

Token 和 JWT 

    • 都是访问资源的令牌
    • 都可以记录用户的信息
    • 都是使服务端无状态化
    • 都是只有验证成功后,客户端才能访问服务端上受保护的资源

 

 

posted @ 2022-01-15 05:43  三五八团楚云飞  阅读(311)  评论(0)    收藏  举报