Skip to content

移动应用微信登录功能接入 ​

一、背景 ​

img

传统登录方式是使用帐号密码来进行登录,用户输入帐号密码之后,登录到平台当中。此时用户的帐号密码就交给了平台进行管理,如果是权威的网站还好,但如果是一些小众的不权威的网站,那么用户的帐号密码就会被这些小众网站记录下来了,会具备相关的安全风险问题(有可能用户注册的帐号和密码跟自己的其他网站相关联)。

我们开始思考是否能够使用第三方平台的帐号来登录本平台。比如常见的网站/App都有一个使用第三方帐号(微信/github)登录的功能。(一般授权成功之后,本平台就可以使用授权凭证拿到用户在第三方平台帐号的相关信息)

毕竟你可能不信任一些站点,比如VPN购买网站,但是你信任Github网站。

二、啥是Oauth2.0 ​

在OAuth2的流程当中,具有三个角色。分别是用户(也就是你自己)、权威的、你信任的网站和你准备要登录的网站。但是你信任的权威网站和你准备要登录的网站需要先建立联系,你准备要登录的网站必须先向你信任的权威网站进行申请,申请自己作为你准备要登录的网站,允许你使用该权威网站来进行登录(一般就是申请app id和app secret)。

实际上,OAuth2应该有四个角色在里头

  • 资源所有者(用户自己,即用户放在资源服务器里头的资源是用户的,用户是这些资源的主人)
  • 第三方应用(用户准备要登录的手机App或者web站点)
  • 资源服务器(第三方应用提供access_token,这里负责给第三方应用传递用户的头像、昵称等信息)
  • 授权服务器(第三方应用想要从资源服务器拉取需要通过access_token凭证来获取。但是这个access_token又需要从这里来获取)

三、Oauth2.0应用流程 ​

img

  • 第三方应用跟资源所有者之间
    • A:第三方应用向资源的所有者发送授权请求
    • B:资源的所有者点击同意之后,就会交给第三方应用一个用户授权许可
  • 第三方应用跟授权服务器之间
    • C:第三方应用拿到了用户授权许可,将其交给授权服务器
    • D:授权服务器校验第三方应用传递过来的用户授权许可,校验通过后返回一个access_token
  • 第三方应用跟资源服务器之间
    • E:第三方应用拿到了授权服务器返回的access_token,带着access_token向资源服务器请求用户的相关资源
    • F:资源服务器每次校验access_token,通过后返回第三方应用需要的用户的相关资源

整个流程中,可以看到,最重要的环节就是B这一个步骤,只有确定了B这一步,才能知道C这一步是拿什么东西(code?token?还是什么?)去向授权服务器验证。因此,我们就需要深入到授权这一环节中去。一个授权所需的 信息,有应用名称+应用网站+重定向url+第三方应用id+第三方应用secret。授权有四种模式:

  • 授权码:正宗的Oauth认证(推荐)
  • 简化模式:为web浏览器设计
  • 密码模式:为遗留的项目设计
  • 客户端模式:为后台API服务消费者设计

四、言秘书App接入微信登录 ​

img

4.1 接入准备 ​

  • 注册开发者账号(在微信开放平台注册)
  • 一个移动应用(言秘书App)
  • 拥有以上两者后,登录微信开放平台,添加移动应用(言秘书App)并提交审核,审核通过后可获取应用AppID和AppSecret。

4.2 模式流程 ​

  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

4.3 业务流程 ​

  1. 用户点击同意app隐私政策等政策信息
  2. 用户请求登录第三方应用,言秘书请求微信OAuth2.0授权登录:用户点击言秘书App中的微信登录按钮,用户的手机界面从言秘书App跳转到微信App
  3. 微信开放平台请求用户确认:微信App弹出授权界面(内容一般为:言秘书App申请使用,获取你的昵称、头像),等待用户确认是否授权自己的微信昵称和头像给言秘书App使用。
  4. 用户确认允许,请求发送给微信开放平台。微信App重新反过来拉起言秘书App,同时会带上临时授权code:用户在微信App点击“允许”,授权自己的微信昵称和头像给言秘书App使用。点击“允许”后,微信自动跳转回言秘书。
  5. 通过code加上appid和appsecret获取access_token:跳转回言秘书之后,言秘书App客户端拿到微信传递过来的临时code,客户端将这个临时code传递给后端,后端利用code + appid + appsecret跟微信开放平台交换得到access_token。
  6. 言秘书App后端通过拿到的access_token向微信服务器请求用户的微信头像和昵称,传递给言秘书App客户端。言秘书客户端将用户的微信头像和昵称展示出来。

五、总结 ​

简而言之,对言秘书客户端需要做的事情就是:唤起微信App,拿到授权code,传递授权code给后端。

六、参考 ​