虚拟账号授权模式
虚拟账号授权模式主要适用于开发者已存在自有账号体系,希望集成Aqara设备来丰富自有loT生态,但不想让用户感知到两套账号即Aqara账号和自有账号,则可在自有APP中集成Aqara设备配网SDK,将Aqara设备绑定到指定的虚拟账号中,实现双方设备的互联互通。
- 虚拟账号:指通过Aqara开发者平台创建虚拟Aqara账号,实现与第三方账号体系的打通,用户可以通过开放的SDK或实施工具将设备绑定到该账号。
授权流程时序图如下所示。
步骤1 通过开发者创建的标识账号创建Aqara虚拟账号,获取虚拟用户唯一标识openid
- 接口intent:config.auth.createAccount
- 接口描述:通过提供的开发者标识账号accountId创建一个虚拟的Aqara账号,实现与第三方账号体系的打通。虚拟账号不可用于Aqara Home App,需要搭配设备配网SDK使用。
- 请求参数:
名称 |
类型 |
是否必须 |
描述 |
accountId |
String |
是 |
开放者创建的标识账号id,保障该AppId下唯一 |
remark |
String |
否 |
备注 |
needAccessToken |
Boolean |
否 |
是否需要返回accessToken,true: 需要; false:不需要 |
accessTokenValidity |
String |
否 |
访问令牌有效时长,单位天,默认7d。支持1~24h(小时),1~30d(天),1~10y(年) ,refreshToken时长默认为accessToken有期限+30天 |
{
"intent": "config.auth.createAccount",
"data": {
"accountId": "18900001234",
"remark": "lumi-1"
}
}
名称 |
类型 |
描述 |
openId |
String |
用户标识唯一id |
expiresIn |
String |
accessToken过期时间,单位秒,当needAccessToken为true时返回 |
accessToken |
String |
访问令牌,当needAccessToken为true时返回 |
refreshToken |
String |
访问刷新令牌,refreshToken时长默认为accessToken有期限+30天,当needAccessToken为true时返回 |
{
"code": 0,
"requestId": "",
"message": "Success",
"msgDetails": null,
"result": {
"openId": "xxx"
}
}
步骤2 通过开发者创建的虚拟标识账号获取授权验证码authCode
- 接口intent:config.auth.getAuthCode
- 接口描述:本接口用于获取授权验证码Code,验证码有效期10分钟。
- 请求参数:
名称 |
类型 |
是否必须 |
描述 |
account |
String |
是 |
用户虚拟标识账号,步骤1的accountId |
accountType |
int |
是 |
账号类型,2-虚拟账号 |
accessTokenValidity |
String |
否 |
访问令牌有效时长,单位天,默认7d。支持1~24h(小时),1~30d(天),1~10y(年) ,refreshToken时长默认为accessToken有期限+30天 |
{
"intent": "config.auth.getAuthCode",
"data": {
"account": "189000123456",
"accountType": 2,
"accessTokenValidity": "1h"
}
}
名称 |
类型 |
描述 |
authCode |
String |
当请求参数accountType为2时返回,authCode有效期10分钟。 |
{
"code": 0,
"requestId": "",
"message": "Success",
"msgDetails": null,
"result": {
"authCode": "xxxx"
}
}
步骤3 通过授权验证码authCode获取访问令牌accessToken
- 接口intent:config.auth.getToken
- 接口描述:在授权码Code过期前,通过此接口将授权码换取访问令牌accessToken,访问令牌的默认有效期为7天,可以通过步骤2自定义有效期时长。
- 请求参数:
名称 |
类型 |
是否必须 |
描述 |
authCode |
String |
是 |
上一步请求获取的authCode |
account |
String |
是 |
用户虚拟标识账号,步骤1的accountId |
accountType |
Integer |
是 |
账号类型,2-虚拟账号 |
{
"intent": "config.auth.getToken",
"data": {
"authCode": "xxxx",
"account": "xxx",
"accountType": 2
}
}
名称 |
类型 |
描述 |
expiresIn |
String |
accessToken过期时间,单位秒 |
openId |
String |
用户唯一id |
accessToken |
String |
访问令牌 |
refreshToken |
String |
访问刷新令牌,refreshToken时长默认为accessToken有期限+30天 |
{
"code": 0,
"requestId": "",
"message": "Success",
"msgDetails": null,
"result": {
"expiresIn": "86400",
"openId": "593652793976837702248177061889",
"accessToken": "b8001e1893f5e4316a4f8c3b47df3720",
"refreshToken": "ddd9dc7e9ec7b772e852121ed2fe75aa"
}
}
步骤4 通过refreshToken刷新访问令牌,获取新的accessToken和refreshToken
- 接口intent:config.auth.refreshToken
- 接口描述:在accessToken过期前,通过此接口用refreshToken刷新访问令牌accessToken,refreshToken时长默认为accessToken有期限+30天。
- 请求参数:
名称 |
类型 |
是否必须 |
描述 |
refreshToken |
String |
是 |
访问刷新令牌 |
{
"intent": "config.auth.refreshToken",
"data": {
"refreshToken": "xxxx"
}
}
名称 |
类型 |
描述 |
expiresIn |
String |
accessToken过期时间,单位秒 |
openId |
String |
用户唯一id |
accessToken |
String |
新的访问令牌 |
refreshToken |
String |
新的访问刷新令牌 |
{
"code": 0,
"requestId": "",
"message": "Success",
"msgDetails": null,
"result": {
"expiresIn": "86400",
"openId": "593652793976837702248177061889",
"accessToken": "b8001e1893f5e4316a4f8c3b47df3720",
"refreshToken": "ddd9dc7e9ec7b772e852121ed2fe75aa"
}
}