分享人:骏隆,钉钉开放平台能力中心前端负责人
一键回看视频地址:一键回看
目录:
一、数据流转为什么需要授权,哪些数据需要授权
二、钉钉如何做数据授权
三、无线端统一授权套件详解
四、各类型应用获取手机号流程详解
五、三方应用获取用户手机号实践 – 完成一个小作业
正文:
一、数据流转为什么需要授权,哪些数据需要授权?
为什么获取个人信息需要授权?
- 2020年10月1日,我国实施的《信息安全技术个人信息安全规范》中,对个人信息保护做出了更明确的规定;
- 2021年6月10日,《中华人民共和国数据安全法》正式公布,在法律层面对个人信息保护提出规范,任意采集和获取个人信息都属于违法行为。
哪些数据需要授权?
需要授权的数据主要包括:个人信息和个人敏感信息,在法律条文中都给出了明确规定。
个人信息
- 个人信息是指:以电子或者其它方式记录的、能够单独或者与其它信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息;
- 个人信息包括:姓名、出生日期、身份证件号码、个人生物识别信息、住址、通信通讯联系方式、通信记录和内容、账号密码、财产信息、征信信息、行踪轨迹、住宿信息、健康生理信息、交易信息等。
个人敏感信息
- 个人敏感信息是指:一旦泄露、非法提供或滥用,可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息;
- 个人敏感信息包括:身份证件号码、个人生物识别信息、银行账号、通信记录和内容、财产信息、征信信息、行踪轨迹、住宿信息、健康生理信息、交易信息、以下(含)儿童的个人信息等。
在钉钉场景下,需要授权的数据包括两类:
自己的数据给别人
范围:
- 个人隐私类数据:个人手机号、身份证号,个人邮箱、钉钉头像、URL等;
- 平台上产生的属于自己的数据:个人支付信息、好友关系等;
场景:
- 获取用户手机号用于同步登录;
- 获取蚂蚁森林好友关系(蚂蚁森林);
- 读取工作台小程序用户信息(工作台);
- 读取个人支付宝信息(企业金融);
别人的数据给自己:属于平台赋予个人的权限
场景:
- 个人发票夹添加发票(企业金融);
- 个人名片夹添加名片(名片);
- 允许发送个人服务窗消息(服务窗);
二、钉钉如何做数据授权
钉钉数据授权主体
钉钉数据授权包括三个主体:信息主体(用户)、信息控制者(钉钉)和信息使用者(钉钉应用)。信息使用者向信息控制者发出数据请求,信息控制者向信息主体发出获取个人信息请求,得到允许后将个人信息数据传输给信息使用者。
钉钉数据授权流程
钉钉数据授权流程主要有四个步骤(见下图):
① 被授权方请求授权方给同意凭证;
② 被授权方拿凭证查询数据接口;
③ 接口做调用鉴权;
④ 返回授权方数据给被授权方;
钉钉数据授权方式(旧版)
在2021年以前,钉钉采用OAuth2登录授权方式获取个人信息。
一个三方应用对接OAuth2登录授权方式获取用户信息的流程如下图:
a. 钉钉用户要登录三方应用;
b. 三方应用请求钉钉开放平台授权登录;
c. 钉钉开放平台确认用户登录;
d. 用户登录确认授权给钉钉开放平台;
e. 钉钉开放平台拉起三方应用或重定向导三方带上auth_code;
f. 三方应用根据auth_code换取访问Token;
g. 三方应用server调用接口得到访问Token;
h. 钉钉开放平台返回Token给三方应用server;
i. 三方应用server调用业务接口;
j. 钉钉开放平台返回业务数据给三方应用server。
OAuth2方案支持企业内部应用和三方企业应用,但不支持三方个人应用。
痛点:
a. OAuth2方案无法支持小程序,因为带auth_code回传小程序的链路无法实现;
b. 无法做权限细分;
c. 移动端的体验非常差;
d. 授权内容(接口、字段)文案无法定制;
三、移动端统一授权套件
基于OAuth2方案在移动端存在的问题,钉钉开发了移动端统一授权套件。
方案设计难点
- Native组件更新依赖发版,升级困难;
- 需要支持H5&小程序应用对接;
解法:授权套件(授权小程序 + SDK)
- 多端一致,抹平iOS、Android功能差异和版本差异;
- 多应用类型支持(小程序、H5);
- 半屏呈现,类组件体验;
- 接入简单,文档完备;
授权套件方案流程,如下:
通信原理
为什么用小程序?
- 查询授权状态,需要一个安全环境;
- 小程序支持半屏打开,且支持半屏高度定制,体感上像原生组件;
- 通信原理:小程序既支持与小程序之间通信,又支持与H5应用之间的通信(见下图);
小程序对接授权套件
- 在App.js中运用app.onShow方法添加onAuthAppBack调用,用于接收授权小程序返回的数据;
在page.js中操作:
- 通过sdk openAuthMiniApp方法唤起授权套件;
- 在page.onShow里调用disposeAuthData处理App.js中app.onShow接收到的返回数据,具体方法是App.js的onShow里通过eventemitter2注册事件并emit接收到授权数据,然后在page.js的onShow里监听事件,处理授权结果;
H5微应用对接授权套件
- H5与授权小程序通信原理:通过resume事件回调监听来实现应用之间的通信;
- H5是通过钉钉jsapi方法打开的小程序,所以需要在jsapi 的ready回调里执行。
四、钉钉个人信息授权实现方式汇总
获取授权
- 移动端(小程序、H5)
方案:统一授权套件 - PC端(浏览器、电脑钉钉)
方案:OAuth2.0授权
Demo源码:https://github.com/opendingtalk/h5app-auth-user-demo
取消授权
个人解除授权
方法:钉钉app我的–设置–安全中心–隐私开关–应用授权管理
应用对接取消授权功能
五、三方应用获取个人信息授权实战
实践一:三方企业应用(H5)获取用户手机号
详细步骤:
- 创建第三方应用H5
a. 登录开发者后台,在应用开发页面,选择第三方企业应用,然后单击创建应用。
b. 选择应用类型,然后填写应用的基本信息,再单击确定创建。
c. 应用创建完成。 - 代码准备
- 配置应用权限
在权限管理中勾选“个人手机号信息”和“通讯录个人信息读权限”,然后点击批量申请。 - 代码端配置
a. 将应用信息中的key和secret代码配置到代码端。
b. Java的逻辑解析。
提供获取用户信息的接口,以及authCode;
在getUserInfo中,用authCode换取AccessToken,使用AccessToken请求开放接口,从而获取用户信息; 应用授权对接
在app.js中引入钉钉统一授权套件SDK;import { onAuthAppBack } from 'dingtalk-design-libs/biz/openAuthMiniApp';
直接在触发事件里调用openAuthMiniApp即可;
运行构建
npm run build
- 启动移动端
实践二、企业自建应用(小程序)获取用户信息
详细步骤:
- 创建小程序
a. 登录开发者后台,在应用开发页面,选择企业内部开发,然后单击创建应用。
b. 选择应用类型,然后填写应用的基本信息,再单击确定创建。
c. 小程序创建完成; - 配置应用权限
在权限管理中勾选“个人手机号信息”和“通讯录个人信息读权限”,然后点击批量申请。 - 在代码端初始化小程序,运用钉钉小程序开发工具打开小程序
应用授权对接
a. 在小程序app.js文件中引入钉钉统一授权套件SDK;import { onAuthAppBack } from ‘dingtalk-design-libs/biz/openAuthMiniApp’;
b. 在app.onShow方法添加onAuthAppBack调用;
c. 在小程序需要授权的页面,使用授权SDK。例如page/index/index.js,通过openAuthMiniApp唤起授权套件;
import { openAuthMiniApp, disposeAuthData} from 'dingtalk-design-libs/biz/openAuthMiniApp';
注:clientId需要根据小程序应用信息中的AppKey重新配置
d. 使用page.onShow方法调用disposeAuthData处理授权后的结果;
- 在模拟器中操作
六、Q&A
Q: 目前,移动端统一授权套件一定要引入才可以使用,在未来是否会集成到钉钉小程序开发环境中?
A:不会。移动端统一授权套件之所以选择授权小程序+SDK的方案,其中一个原因就是可以做到灵活定制,达到更好的效果。如果集成到钉钉小程序中则不容易实现。
Q:Demo是否有Python或C语言版本?
A:目前Demo中只提供Java版本,后续会逐步完善。
Q:在实际操作中,在同一个小程序的两个页面都调用了授权套件,在第一个页面的授权弹窗选择拒绝后,在另一个页面的授权弹窗选择同意,结果却是第一个页面同意,是什么原因?
A:在小程序对接中,App.js的onShow里通过eventemitter2注册事件并emit接收到授权数据,然后在page.js的onShow里监听事件,处理授权结果。事件的key是同一个,在两个页面中同时监听事件时,当第一个页面弹窗取消而第二个页面又唤起弹窗时,返回数据被第一个配置监听事件捕获,就导致执行第一个页面的后续数据处理流程。为解决这一问题,钉钉进行了SDK的优化,后续会将方法以文档方式提供给大家。
Q:PC端的个人授权每次都要请求服务端,后期是否有针对这个的改善方案?
A:钉钉正在规划将小程序的能力布置到PC钉钉桌面端,在钉钉桌面端的应用授权则可以得到改善。
Q:如何导出通讯录数据?
A:可以在开发者文档中搜索“通讯录”找到相关文档介绍。