第三方登录

前言

最近由于在项目中用到了三方登录,于是就去探究了下原理,本文主要记录下三方(微信)登录的整个流程。

三方登录

微信使用了 OAuth 2.0 授权机制,当三方应用获取到授权后,就可以获取到用户的数据。完整的微信登录时序图如下所示:

微信登录

上图中有几点需要说明下:

  1. 如果应用需要支持微信授权,那么必须到微信后台进行申请(需提供应用相关的信息),申请通过后,会分配 client_id 以及 client_secret,其中 client_id 给客户端,client_secret 要严格保密只存储在服务端。

  2. 为什么需要有 authorization_code,直接返回 access_token 及 refresh_token 不是更好吗?这是为了安全考虑,如果其它应用获取了 root 权限,那么其就可以获取到 access_token,从而导致用户微信的信息泄露,于是 OAuth 2.0 采取让服务端发送请求的方式来避免这个问题。

  3. 为什么需要有 client_secret ?其实和上个问题一样,如果没有那么 authorization_code 被别的应用获取到,其也完全可以去获取 access_token。

  4. 服务端是如何根据 access_token 获取到用户微信信息的?OAuth 2.0 已经规定好了,通过添加请求头 Authorization: bearer

  5. refresh_token 有什么作用?access_token 是有有效期的(也是为了防止其泄漏,有的 App 会将其存本地),当过期后或者想要换个 access_token 时就可以带上 refresh_token 请求微信服务端刷新而无需用户再次授权。

  6. 友盟微信登录是直接返回给上层 access_token 的,它是怎么做到的?它也是拿着 authorization_code 以及客户端配置的 client_secret 去请求微信服务器获取的。其实这种做法并不安全,毕竟客户端经手了 access_token ,违背了 OAuth 2.0 设计的本意。

0%