让猴子都能看懂的 OAtuth2 入门

459 阅读2分钟

背景

     因工作需要,经常需要进行第三方服务的对接,例如,调用短信服务商Api发送用户短信; 调用存储服务商Api获取用户存储信息;
     
这种服务商的接入,第三方服务的对接过程,一般会有一个标准化的规范,如 本文学习的Oauth2

(ps:网上资料太多,看的眼花缭乱,这里仅以个人理解 简单记录OAuth2理解)

抛出问题:

假设: 用户A的个人信息,存放在百度云盘上,那么用户B 如何能到用户A的个人信息?
  

企业微信截图_5642eb01-de23-418a-a6ab-c58624878e4f.png

解决问题

 1 百度云盘提供Api  用户B直接调用
 
   缺陷:因为此时接口无任何访问限制,此时对于用户C,黑客A也能直接调用此API获取信息,造成安全信息泄漏,恶意访问

企业微信截图_7273d2b6-a443-4151-a6d3-e02419e7a8ec.png

2 用户B请求时,提供一个访问token,百度云盘校验通过,即可访问

  缺陷: 用户Btoken 是哪里来的呢? 谁给用户Btoken? 
  
  解决: 需要一个服务器(认证服务器) 来给B颁发token

企业微信截图_d9b1b54b-f5c6-4b2d-a7c6-8b8ecdff6003.png

3 认证服务器(Authorization server)颁发token 给用户B,用户B 拿到此token进行访问

缺陷: 认证服务器(Authorization server) 在未经用户A的允许下 给B token, 
     A:你居然瞒着我给别人赋权限? 我要告你侵权 ****
     
解决: 认证服务器(Authorization server) 颁发token给用户B时,需获取用户A的允许同意

企业微信截图_580f64a3-8de8-4c28-9f4f-1e40bd76f7d5.png

4 认证服务器颁发token给用户B时,获取用户A的允许同意
  

企业微信截图_cf3a5524-689c-4816-8d3a-f7d18f01c3b1.png

细节补充
 用户B 从认证服务器获取token 细致点可以分为两个步骤
 
 1.1
   用户B 请求认证服务器 获取授权码code
   
 1.2
  
  用户B 根据授权码code 再去认证服务器获取token
  

企业微信截图_c52c7b1c-ecb7-4630-9f40-793124197427.png

更多资源

OAuth2 鉴权源码解析 ,401 no body 失败解决方案