主题
App 授权(微信小程序) #
App 登录授权是基于标准的 OAuth 2.0 协议实现的,通过金山文档帐号授权登录第三方 App 的能力。
准备工作 #
在使用 App 登录授权能力之前,你需要先仔细阅读服务商指南,根据文档中的指示在开发者后台 创建一个应用,并获得应用的app_id
和 app_key
。
第一步:获取授权码 #
移动应用跳转金山文档微信小程序进行用户授权,需要第三方 App 接入微信开放平台 SDK,跳转金山文档微信小程序,然后调用金山文档开放平台授权能力,获取授权码。
请先参考微信开放平台移动应用接入指南(iOS/Android),接入微信开放平台 SDK,并根据应用在微信开放平台上注册的信息,完成 SDK 的初始化操作。
此外,iOS 应用还需要按照上述文档要求,配置好应用的 Universal Link。
参考文档:
微信移动应用:APP 拉起小程序功能
微信小程序:小程序打开 APP
跳转到金山文档小程序示例 #
weixin.launchMiniProgram(
{
id: 'gh_c90b888d5c93', //金山文档微信小程序原始ID
path: 'pages/thirdPartyAuth/thirdPartyAuth?appId=SX20220606WJJQNJ&scope=access_personal_files,download_personal_files',
state: '' //由用户自定义,授权成功后会带回 |
},
res => {
// 用户授权后返回code
// 格式json:{"code":"xxxxxx",state:'xxxxx' }
},
err => {
// 返回错误
}
)
代码示例 #
Android :参考微信官方文档 Android 开发示例
iOS :参考微信官方文档 iOS 开发示例
跳转传递参数说明: #
名称 | 类型 | 是否必传 | 说明 |
---|---|---|---|
appId | string | 是 | 应用 APPID,查看应用信息 |
scope | string | 是 | 需申请的权限,用 , 分割,具体类型请参照 scope 权限说明 |
switchAccount | boolean | 否 | 是否打开账号切换弹出层,默认为 false ,不打开 |
state | string | 否 | 由用户自定义,授权成功后会带回 |
第二步:获取令牌 #
提示
由于应用appkey
和获取到的access_token
安全级别比较高,后续刷新access_token
、通过access_token
获取用户信息等步骤,必须从服务器调用接口。
使用场景 #
需要获取令牌
请求地址:/api/v1/oauth2/access_token
请求方法:GET
签名方式:无
Header 参数 #
名称 | 是否必填 | 说明 |
---|---|---|
Content-Type | 是 | 固定为: application/json |
Query 参数 #
名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
code | string | 是 | 用户授权返回 code |
app_id | string | 是 | 应用 APPID |
app_key | string | 是 | 应用 APPKEY |
请求地址示例 #
[GET] https://developer.kdocs.cn/api/v1/oauth2/access_token?code={code}&app_id={APPID}&app_key={APPKEY}
返回参数 #
名称 | 类型 | 说明 |
---|---|---|
code | int | 非 0 表示失败,参考错误码说明 |
+ data | access_token {} | 令牌内容 |
app_id | string | 令牌所属的应用 id |
access_token | string | 令牌 |
expires_in | integer | 令牌有效期,单位为 秒 |
refresh_token | string | 刷新令牌,在授权未过期之前,可用于刷新/重新获取访问令牌 |
返回示例 #
{
"code": 0,
"data": {
"app_id": "SX20220706XGEQGL",
"access_token": "XiDvqrCkvBtAAooijpoMyHQiyeXUhPjk",
"expires_in": 86400,
"refresh_token": "oWtTFhASVZhwKpwOaxNtoRTourVnPxCC"
},
"result": "ok"
}
第三步:刷新过期的令牌 #
由于 access_token
的有效期较短,当 access_token
过期后,可以使用 refresh_token
进行刷新
refresh_token
有效期为 90 天,当 refresh_token
失效之后,需要用户重新授权。
使用 refresh_token
刷新 access_token
时,会返回一个新的 access_token
,原 access_token
自动失效。
使用场景 #
刷新 access_token
请求说明 #
请求地址:/api/v1/oauth2/refresh_token
请求方法:POST
签名方式:无
Header 参数 #
名称 | 是否必填 | 说明 |
---|---|---|
Content-Type | 是 | 固定为: application/json |
Query 参数 #
名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
app_id | string | 是 | 应用唯一标识 |
Body 参数 #
名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
app_key | string | 是 | 应用密钥 |
refresh_token | string | 是 | 填写通过 code 获取到的refresh_token 参数 |
请求示例 #
[POST] https://developer.kdocs.cn/api/v1/oauth2/refresh_token?app_id={app_id}
{
"app_key": "{app_key}",
"refresh_token": "{refresh_token}"
}
返回参数 #
名称 | 类型 | 说明 |
---|---|---|
code | int | 非 0 表示失败,参考错误码说明 |
+ data | refresh_token {} | 新的令牌内容 |
app_id | string | 令牌所属的应用 id |
access_token | string | 令牌 |
expires_in | integer | 令牌有效期,单位为 秒 |
refresh_token | string | 刷新令牌,在授权未过期之前,可用于刷新/重新获取访问令牌 |
返回示例 #
{
"code": 0,
"data": {
"access_token": "XiDvqrCkvBtAAooijpoMyHQiyeXUhPjk",
"app_id": "SX20220706XGEQGL",
"expires_in": 7776000,
"refresh_token": "oWtTFhASVZhwKpwOaxNtoRTourVnPxCC"
},
"result": "ok"
}
关键字段说明 #
字段 | 说明 | 有效期 | 描述 |
---|---|---|---|
code | 授权码 | 5 分钟 | 通过服务商前端发送至服务商后端,被换取令牌接口消费后会失效 |
access_token | 令牌 | 24 小时 | 储存在服务商后端,所有与开放平台的通信都在后端完成,有效的避免令牌被泄露 |
refresh_token | 刷新令牌 | 90 天 | 用于对令牌进行刷新,防止频繁进行登录授权,提升用户体验 |