第三方授权体系(OAuth,OpenId)

9 10月

APP(包括PC网站,为简单起见统称APP)通常需要用户注册/登陆,这样才能将浏览记录,购物车,收藏等信息与个人账号关联上:

但这种做法不能让人满意,核心问题是:信任,成本

对用户:不同的APP设置不同的密码记不住,设置相同的密码又担心不安全,如果非要用户注册登录,用户很可能选择卸载APP,造成用户流失。

对APP:小公司其实也不愿意保留用户信息,日常维护数据都是需要RD成本的。而且万一完全措施不到位,造成用户信息密码被泄露,对公司的业务和声誉都是巨大打击。

所以第三方授权体系应运而生:找个具有公信力的平台(例如微信,淘宝等)做中间商,有平台信用背书让用户无忧。小公司并不直接持有用户信息和密码,无需承担维护数据的成本和安全风险。

OAuth & OpenId

国内有公信力的第三方授权平台有:微信,淘宝等,国外有公信力的第三方平台有:Facebook,Twitter等。用户在第三方授权平台完成登录后,平台以授权的方式告知APP用户信息,并提供OpenId作为用户登录态的凭证。这个授权的标准被称为OAuth(Open Authorization)。

以腾讯为例,当用户在微信,QQ上登录后,腾讯可以授权给APP以下用户信息:

  • 基础信息:用户昵称,头像url,性别,城市,生日,简介等
  • vip信息:会员等级,会员期限,年费会员,皇钻,上次充值时间等
  • 空间相册:照片总数,照片标题,照片宽高url,拍摄时经纬度,上传时间,修改时间等
  • 其他更多功能

第一步:APP接入第三方授权平台SDK

(以腾讯开放平台为例)

  • 第一步:在第三方授权平台上为你的APP申请个appId,例如:appid=222222
  • 第二步:下载第三方授权平台提供的SDK,并集成进APP内。方式详见各第三方授权平台的官网文档,不赘述。
  • 第三步:APP启动后,用申请到的appid完成SDK的初始化工作:
    _oauth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];

第二步:APP唤起第三方授权平台请求授权

在合适的时机(例如用户点击注册 / 登录按钮时),APP向第三方授权平台发起授权请求。

【登录授权页】是由第三方授权平台提供的,不是在APP内让用户输入用户名密码,而是唤起微信 / QQ,在内部完成登录流程,确保了APP无法获得用户名密码等敏感信息。如果没有安装微信 / QQ,会打开浏览器跳转到H5页面进行登录授权。

※注意:如果授权过多,可能会引起用户反感,导致用户流失,请求授权需要保持克制。

// 好例子
[_oauth authorize:@[kOPEN_PERMISSION_GET_USER_INFO,
                    kOPEN_PERMISSION_GET_SIMPLE_USER_INFO]];

// 坏例子:授权过多,可能导致用户拒绝
[_oauth authorize:@[kOPEN_PERMISSION_GET_USER_INFO,
                    kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
                    kOPEN_PERMISSION_ADD_ALBUM,
                    kOPEN_PERMISSION_ADD_TOPIC,
                    kOPEN_PERMISSION_CHECK_PAGE_FANS,
                    kOPEN_PERMISSION_GET_INFO,
                    kOPEN_PERMISSION_GET_OTHER_INFO,
                    kOPEN_PERMISSION_LIST_ALBUM,
                    kOPEN_PERMISSION_UPLOAD_PIC,
                    kOPEN_PERMISSION_GET_VIP_INFO,
                    kOPEN_PERMISSION_GET_VIP_RICH_INFO]];

第三步:第三方授权平台将OpenId和用户信息返给APP

在第三方授权平台的登录授权页完成登录后,平台会生成一个OpenId。OpenId就是用APP申请的appid + 用户账号 + 算法进行加密后生成的,所以同一个用户给不同的APP授权后,返给APP的 OpenId是不同的。

平台将OpenId作为用户身份凭证返回给APP,APP通过OpenId就可以获取该用户信息。

PS:早期腾讯直接返回的是QQ号,现在认为QQ号也属于隐私数据,所以都统一成OpenId了。

第四步:APP根据OpenId从APP后台获取购物车等用户信息(完成整个登录过程)

除了授权与登录,常见的第三方平台包括:

  • 授权和登录:微信,QQ,淘宝,微博
  • 地图:高德,百度地图,腾讯地图
  • 支付:支付宝,微信支付,QQ钱包
  • 数据(打点,异常,crash):友盟
  • 直播云服务:抖音开放平台,腾讯云
  • 其他(短信推送,天气服务等)

可以将第三方平台提供的SDK集成进APP内,初始化后通过API就可以使用第三方平台的服务,而不用自己去开发。

OAuth 2.0 的一个简单解释
OAuth 2.0 的四种方式
腾讯开放平台

发表评论

电子邮件地址不会被公开。 必填项已用*标注