https://blog.csdn.net/qq_40949763/article/details/78467790
https://www.cnblogs.com/-wenli/p/12630442.html
https://blog.csdn.net/gdp12315_gu/article/details/79905424

写一个网站的登录模块,阅读内容必须括

  1. OAuth
  2. Passport
  3. 其他第三方模块
  4. 以及密码加密

oauth2,分为了三个角色

  1. Authorization Server授权服务器
  2. Resource Server资源服务器
  3. Client客户端

客户端API 一个,就是授权后的 callback回调URL

  1. localhost:6001/user/callback

SSO服务端API 三个,localhost:7008

localhost:7008/oauth2.0/token

localhost:7008/oauth2.0/me

localhost:7008/user/get_user/info // 获取用户信息

  1. <a name="Wj46V"></a>
  2. ## 客户端
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/112859/1638594604355-af77d003-f1dd-499e-9915-18e3e17fd10f.png#clientId=u3ec1fdc7-2d92-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=600&id=u7a6646e4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1200&originWidth=1298&originalType=binary&ratio=1&rotation=0&showTitle=false&size=109135&status=done&style=none&taskId=ueb37854d-b805-4d59-9737-5cc36e1d62f&title=&width=649)
  4. <a name="DDEK7"></a>
  5. ## 授权服务器
  6. 颁发 accessToken
  7. <a name="nYfQ2"></a>
  8. ## 资源服务器
  9. 每个允许其访问资源的客户应用都现在我们的系统中注册一个appkey,<br />然后每次用这个appkey向我们的授权服务器申请Access Token,<br />这样不论客户应用换不换ip、有多少ip,只要客户应用的appkey是唯一不变的就不用做任何修改,也不用担心ip伪装的问题<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/112859/1637628988796-7155bacc-51ef-4852-ab5a-242e649a2e0d.png#clientId=u3b6115b5-555f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=426&id=ue38e01e2&margin=%5Bobject%20Object%5D&name=image.png&originHeight=852&originWidth=1280&originalType=binary&ratio=1&rotation=0&showTitle=false&size=490735&status=done&style=none&taskId=ub059a6fe-4524-45dc-af38-b06b0754ba5&title=&width=640)
  10. 资源服务器是指应用<br />授权服务器给 client 授予 A 用户访问与 A 用户相关的商品信息
  11. 资源服务器和授权服务器关联肯定是通过用户 ID 来关联的<br />但是这个用户返回给 client 的用户 id 是不是每个 client 都不一样, 这个每个公司设计不同, 如内部系统可以设计成一样的, 如微信就是设计的不一样的<br />在删除这一块: 通常会走消息,在授权服务器那边删除用户之后,会发一条消息出来, 然后需要对用户数据清除的应用会监听到这条消息然后再做处理. 通常来说, 为了保证数据的完整,都不会做处理.
  12. 通过客户端向授权服务器请求授权凭证,然后客户端携带授权凭证去请求资源服务器的资源<br />一般来说,授权服务器和资源服务器是分库的,<br />也就是授权服务器的用户、角色这些信息是不在资源服务器的库里面的<br />[https://www.cnblogs.com/mirandachen/p/9700182.html](https://www.cnblogs.com/mirandachen/p/9700182.html)
  13. <a name="qdI9G"></a>
  14. ## 登录成功
  15. 输入用户名和密码,登录成功后,302重定向 GET方法,跳转到回调地址<br />GET传参
  16. ```jsx
  17. {
  18. accessToken: '令牌', // 用这个令牌去请求 API,返回真实的 token
  19. userId: '',
  20. tenant: '租户',
  21. accessExpiredTime: '令牌过期时间',
  22. }

验证 token

  1. /api/user/valid-token

刷新token

  1. /api/user/refresh-token

sso参考资料

Spring Security+OAuth2 精讲,打造企业级认证与授权
https://coding.imooc.com/class/455.html

  • 基于从单体到微服务的演进,精讲主流安全框架 Spring Security5.x 的核心技术
  • 一站式覆盖目前企业主流认证授权的方方面面