微信相关各种授权的概念说明
1. 前言
作为开发者,在与微信相关的资源打交道时,会遇到很多 登录
、鉴权
、授权
、凭证
等等相关的概念,这里进行以下梳理说明:
还可以参考微信支付文档中,对于相关概念的说明:
::: tip 引用
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/ico-guide/chapter1_1.shtml
:::
2. 概念定义
2.1 微信开放平台:
参见文档1, 以下简称:开放平台
2.2 微信公众平台:
参见文档1, 以下简称:公众号
另,公众号下还有个微信网页
的概念,开发者是以公众号的身份为微信用户提供服务,在具体业务调用中,和一般的公众号
有一点区别,下面会提到。
2.3 微信小程序:
参见文档1, 从属与微信公众平台, 以下简称:小程序
2.4 关于开发账号:
==首先==,开放平台账号和公众平台账号是两个独立的账号,【不互通】。账号使用邮箱进行注册。
==其次==,微信各个平台、应用的账号是互斥的,所以如果开放平台账 和 公众平台 都需要,那么需要准备两个没有注册过任何微信体系账号的 邮箱(绑定过个人微信的都不行)。
微信开放平台文档有写:
2)填写邮箱与密码信息。(填写未被微信开放平台注册、未被微信公众平台注册、未被微信私人帐号绑定的邮箱).
==再次==,开放平台作为高级业务,可以在账号内关联 公众号、小程序、小游戏 等(用以启用UnionID机制,微信体系统一对接就靠这个了)
==最后==,开放平台和公众平台注册需要资质审核,300RMB/个/年, 小程序虽然从属于公众平台,但是是否需要另外审核,我个人开发者没法测试了。
PS:开发平台理论上不能绑定不同公司主体(资质审核时填写的)的公众号、小程序,但未做测试。
==另外==,资质审核时需要身份证号,而据说每个人身份证号注册微信体系产品限定最多5个账号,所以个人微信和身份信息,没事别乱注册。公司最好用企业资质注册。
2.5 角色身份定义
- 2.5.1 Platform:微信平台统称
- 2.5.2 Project:为了简化业务概念,这里Project特指开发者拥有的(或者作为开发成员参与的)开发的软件产品或服务统称。(同一个公司的公众号、小程序、微信网页等项目,具有数据互通、共享的,合为一个Project,在微信开放平台内,表述为同一个
公司账号主体
) - 2.5.3 App:开发者在Platform上注册、申请并审核的各类应用。如公众号、小程序、网站应用等。一个开发者可以申请多个App,并对接整合自己的同一个Project。
- 2.5.4 User:登录微信并使用微信以及开发者所开发Project的 个人微信用户。
2.6 第三方登录
从角色身份所处地位来说,第三方登录是指 User使用其微信账户登录并访问Project,并具有在Project中的唯一身份标识的过程。
方向: User -> Platform -> Project
从微信公布的文档可以得知,微信体系有以下几种第三方登录
- ==微信登录/网站登录== 一般用于PC网页,在Project的PC网页中引导User跳转或弹框扫描登录Platform,然后通过接口换取User在Project中的唯一身份标识,达到登录Project的目的。需要用到微信开放平台的能力。
相关文档:
---网站应用: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
---移动应用: 上面文档的边上可找到,逻辑流程和接口 与 网站应用类同 - ==公众号登录== 用于运行在微信客户端的网页中(手机app或微信PC端),Project引导用户进行跳转授权,通过接口换取User在Project中的唯一身份标识,达到登录Project的目的。需要用到微信公众号的能力。
相关文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html - ==小程序登录== 在开发者开发的小程序中, Project通过小程序提供的能力,获取当前登录小程序的微信User的唯一标识,然后在自己的服务器中关联绑定User的唯一身份标识,从而可进行相关业务。
相关文档: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
2.7 授权凭证
它还有多种常见的名称:接口调用凭证、接口鉴权、授权token、accessToken等等,这里我用的是个人认为比较合适的名称:授权凭证。
从业务上来说,授权凭证是由Platform颁发给App的,用于Project透过App可以使用的接口获取存放于Platform上的数据,执行由Platform提供的相关业务能力, 所需要用到的一个电子凭证。
通俗点说就是Platform用来判断接口调用方是谁,以及有没有权限调用接口的依据。
从微信的各种文档来看,可分为三类:
-
==APP授权== App应用级别的授权,不区分User。一个App只需要保存一份相关授权凭证即可。这类授权的业务有:
-
==OAuth2.0授权== App+User级别的授权,一个User在一个App下独占一份授权。开发者的Project内部需要存储并处理用户的授权凭证的关联关系和缓存管理。这类授权的业务有:
- 公众号网页接口。授权文档:(和公众号登录是同一个文档,即授权同时完成登录)https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
- 网站应用接口。授权文档:(和
微信登录/网站登录
是同一个文档,即授权同时完成登录)
-
==前端接口授权== App+User级别的授权。这个在微信的文档中并没有明确提出。写出来是为了区分开Project在使用Platform提供的前端相关接口能力的场景。
对于开发者来说,授权是透明的,只需要按照文档要求使用API即可,无需自行保存授权凭证
之类的东西。
对于用户来说,一般情况是无感知的,特定的业务场景,会出现明确的授权页面(页面是由微信管理维护的,开发者不可控,可配置参数)。
这类授权的典型场景有:- 公众号的JS_SDK: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
- 小程序的前端API:https://developers.weixin.qq.com/miniprogram/dev/api/
- 原理上是合理的,因为不管是公众号的JS_SDK 还是 小程序的api,他们的运行环境、接口脚本都是由Platform完全控制维护的,且环境的权限也明确依赖的App或者说开发者的身份信息,也就不需要额外的授权控制了。