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
写一个网站的登录模块,阅读内容必须括
- OAuth
- Passport
- 其他第三方模块
- 以及密码加密
oauth2,分为了三个角色
- Authorization Server授权服务器
- Resource Server资源服务器
- Client客户端
客户端API 一个,就是授权后的 callback回调URL
localhost:6001/user/callback
SSO服务端API 三个,localhost:7008
- qq的授权URL,https://graph.qq.com/oauth2.0/show ```jsx localhost:7008/oauth2.0/authorize
localhost:7008/oauth2.0/token
localhost:7008/oauth2.0/me
localhost:7008/user/get_user/info // 获取用户信息
<a name="Wj46V"></a>
## 客户端
![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)
<a name="DDEK7"></a>
## 授权服务器
颁发 accessToken
<a name="nYfQ2"></a>
## 资源服务器
每个允许其访问资源的客户应用都现在我们的系统中注册一个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)
资源服务器是指应用<br />授权服务器给 client 授予 A 用户访问与 A 用户相关的商品信息
资源服务器和授权服务器关联肯定是通过用户 ID 来关联的<br />但是这个用户返回给 client 的用户 id 是不是每个 client 都不一样, 这个每个公司设计不同, 如内部系统可以设计成一样的, 如微信就是设计的不一样的<br />在删除这一块: 通常会走消息,在授权服务器那边删除用户之后,会发一条消息出来, 然后需要对用户数据清除的应用会监听到这条消息然后再做处理. 通常来说, 为了保证数据的完整,都不会做处理.
通过客户端向授权服务器请求授权凭证,然后客户端携带授权凭证去请求资源服务器的资源<br />一般来说,授权服务器和资源服务器是分库的,<br />也就是授权服务器的用户、角色这些信息是不在资源服务器的库里面的<br />[https://www.cnblogs.com/mirandachen/p/9700182.html](https://www.cnblogs.com/mirandachen/p/9700182.html)
<a name="qdI9G"></a>
## 登录成功
输入用户名和密码,登录成功后,302重定向 GET方法,跳转到回调地址<br />GET传参
```jsx
{
accessToken: '令牌', // 用这个令牌去请求 API,返回真实的 token
userId: '',
tenant: '租户',
accessExpiredTime: '令牌过期时间',
}
验证 token
/api/user/valid-token
刷新token
/api/user/refresh-token
sso参考资料
Spring Security+OAuth2 精讲,打造企业级认证与授权
https://coding.imooc.com/class/455.html
- 基于从单体到微服务的演进,精讲主流安全框架 Spring Security5.x 的核心技术
- 一站式覆盖目前企业主流认证授权的方方面面