移动应用微信登录功能接入
一、背景

传统登录方式是使用帐号密码来进行登录,用户输入帐号密码之后,登录到平台当中。此时用户的帐号密码就交给了平台进行管理,如果是权威的网站还好,但如果是一些小众的不权威的网站,那么用户的帐号密码就会被这些小众网站记录下来了,会具备相关的安全风险问题(有可能用户注册的帐号和密码跟自己的其他网站相关联)。
我们开始思考是否能够使用第三方平台的帐号来登录本平台。比如常见的网站/App都有一个使用第三方帐号(微信/github)登录的功能。(一般授权成功之后,本平台就可以使用授权凭证拿到用户在第三方平台帐号的相关信息)
毕竟你可能不信任一些站点,比如VPN购买网站,但是你信任Github网站。
二、啥是Oauth2.0
在OAuth2的流程当中,具有三个角色。分别是用户(也就是你自己)、权威的、你信任的网站和你准备要登录的网站。但是你信任的权威网站和你准备要登录的网站需要先建立联系,你准备要登录的网站必须先向你信任的权威网站进行申请,申请自己作为你准备要登录的网站,允许你使用该权威网站来进行登录(一般就是申请app id和app secret)。
实际上,OAuth2应该有四个角色在里头
- 资源所有者(用户自己,即用户放在资源服务器里头的资源是用户的,用户是这些资源的主人)
- 第三方应用(用户准备要登录的手机App或者web站点)
- 资源服务器(第三方应用提供access_token,这里负责给第三方应用传递用户的头像、昵称等信息)
- 授权服务器(第三方应用想要从资源服务器拉取需要通过access_token凭证来获取。但是这个access_token又需要从这里来获取)
三、Oauth2.0应用流程

- 第三方应用跟资源所有者之间
- 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接入微信登录

4.1 接入准备
- 注册开发者账号(在微信开放平台注册)
- 一个移动应用(言秘书App)
- 拥有以上两者后,登录微信开放平台,添加移动应用(言秘书App)并提交审核,审核通过后可获取应用AppID和AppSecret。
4.2 模式流程
- 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
- 通过code参数加上AppID和AppSecret等,通过API换取access_token;
- 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
4.3 业务流程
- 用户点击同意app隐私政策等政策信息
- 用户请求登录第三方应用,言秘书请求微信OAuth2.0授权登录:用户点击言秘书App中的微信登录按钮,用户的手机界面从言秘书App跳转到微信App
- 微信开放平台请求用户确认:微信App弹出授权界面(内容一般为:言秘书App申请使用,获取你的昵称、头像),等待用户确认是否授权自己的微信昵称和头像给言秘书App使用。
- 用户确认允许,请求发送给微信开放平台。微信App重新反过来拉起言秘书App,同时会带上临时授权code:用户在微信App点击“允许”,授权自己的微信昵称和头像给言秘书App使用。点击“允许”后,微信自动跳转回言秘书。
- 通过code加上appid和appsecret获取access_token:跳转回言秘书之后,言秘书App客户端拿到微信传递过来的临时code,客户端将这个临时code传递给后端,后端利用code + appid + appsecret跟微信开放平台交换得到access_token。
- 言秘书App后端通过拿到的access_token向微信服务器请求用户的微信头像和昵称,传递给言秘书App客户端。言秘书客户端将用户的微信头像和昵称展示出来。
五、总结
简而言之,对言秘书客户端需要做的事情就是:唤起微信App,拿到授权code,传递授权code给后端。