账号服务
更新时间:2019-09-25 15:13:56
智能人居开放平台提供用户账号服务,支持两种类型:
平台的内置账号体系:客户不需要拥有自己的账号系统,轻量方式接入;
客户的自有账号体系:客户使用自己独立的账号系统,拥有更强管控能力;
两种账号体系,除了对接方式不同,对终端用户无影响、无使用区别。
客户在开发业务平台时,可以使用内置的账号系统,也可以把自有账号系统对接到智能人居开放平台。
对接账号系统后,客户的用户可以在APP端使用智能人居开放平台提供的API服务,也可以通过云云的方式以用户标识访问API服务(具体的访问权限和限制,见API Reference中的具体定义)。
配置账号体系
账号系统类型
在控制台的“应用组管理”页面,点击应用组的“配置”按钮
选择账号体系:
内置账号体系如果开发者原来没有自己的账号体系,或想重新搭建一套新的账号体系,可以使用该“内置账号体系”方式。平台默认提供一套账号体系,以手机号作为账号,包括账号的注册、登录、找回密码、用户信息查看和修改。
自有账号体系如果开发者原来已有自己的账号体系,可以选择“自有账号体系”方式。平台支持开发者将自己的账号体系,通过进行Oauth认证和平台的用户体系进行关联,维护自己的用户和设备之间的绑定关系、消息通道等。
配置SDK
在移动端,账号系统需要SDK的支持。默认情况下,用户和账号相关的功能已经包含在SDK中。
进入“应用组管理”,在“自有品牌APP列表”点击应用名称可以打开应用详情。在“配置SDK”的Tab页可以看到“用户及账号”相关的SDK配置信息。
内置账号体系
内置账号体系是智能人居开放平台提供的基础服务,ISV在App端集成平台账号SDK即可使用,见SDK配置。
注册和登录账号
账号SDK支持唤起登录页面,包括账号注册和找回密码。参考各平台的使用说明:
可用服务:注册账号、登录账号
查看和修改用户信息
如果希望用户信息更加完善,可以通过调用云端服务完善用户信息,然后再获取完善后的用户信息。
目前服务支持更新用户头像,需要开发者自行保存头像到自已的服务器,然后将最终的头像链接地址保存到平台上。
可用服务:更新用户账号信息、获取用户账号信息
自有账号体系
自有账号体系,基于Oauth2.0协议提供厂商三方自有账号的对接功能, 支持厂商使用自有账号对接业务。
控制台配置
步骤1:在选择需使用自有账号的应用所在的应用组,在配置中选择“自有账号体系”对接;
步骤2:完成自有账号对接的相关参数配置并确认保存,其中访问/刷新存根URL和获取用户信息URL需厂商提供。
访问/刷新存根URL和获取用户信息URL是真实的可以从Internet访问的服务器地址,通常是厂商自有的账号服务器。登录过程中智能人居开放平台会和账号服务器进行交互,验证和获取用户信息。
需要厂商提供上面两个URL的服务实现,服务定义见访问/刷新存根服务和获取用户信息服务。
账号系统对接
使用自有账号体系登录时,是由厂商APP客户端、厂商自有账号系统和智能人居开放平台的用户服务三方完成登录流程,完成登录共三步:
第一步 获取授权码
第二步 获取访问存根
第三步 获取用户信息
第一步 获取授权码
用户登录自有账号系统,获得厂商的账号系统颁发的授权码(AuthCode);
第二步 获取访问存根
通过授权码(AuthCode)获取带有时效性的访问存根(AccessToken);
获取访问存根(AccessToken)有两个场景:
初始连接时获取存根
存根到期时刷新存根
初次获取
第一次获取连接存根需要使用第一步获取的授权码(AuthCode)。
用户服务收到含有授权码(AuthCode)的登录请求后,会向控制台配置的“访问/刷新存根URL”发起请求,AuthCode和其它参数以QueryString的方式连接在“访问/刷新存根URL”后。
服务验证授权码(AuthCode)有效后,响应授权码对应的用户标识(OpenID)。
参考访问/刷新存根服务定义,初次获取时,grant_type参数的值为authorization_code。
刷新存根
当客户端获得的访问存根(AccessToken)达了失效时间,需要用原存根刷新获得新的存根。
参考访问/刷新存根服务定义,与初次获取存根不同,grant_type参数的值为refresh_token。服务器验证原存根有效,会返回新的访问存根(AccessToken)和失效时间。
第三步 获取用户信息
通过存根(AccessToken)和外部用户标识(OpenID)获取用户信息;
在登录的最后一次,用户服务会向获取用户信息服务的URL发起请求,获取与用户标识(OpenID)对应的用户信息。
参考获取用户信息服务的定义。
服务定义
对接自有账号体系的厂商,需要提供并实现下面两个服务。这两个服务用于登录过程中智能人居开放平台与厂商系统的交互。
服务的URL要在控制台的应用组配置中设置,且是可以通过Internet访问到的地址。
访问/刷新存根服务
请求参数
请求参数以QueryString的方式连接在“访问/刷新存根URL”后
方法:POST
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
grant_type | String | 是 | 枚举值,授权类型: - authorization_code 初次获取访问存根时使用 - refresh_token 刷新访问存根时使用 |
client_id | String | 是 | 即在控制台配置中填入的AppKey; |
client_secret | String | 是 | 即在控制台配置中填入的AppSecret; |
code | String | 初次获取访根时为必填项 为三方服务器颁发的授权码(AuthCode) |
|
refresh_token | String | 刷新访问存根时为必填项 为原访问存根 |
|
redrect_url | String | 是 | 填写固定值none,无跳转 |
响应参数
响应参数以JSON对象格式在Body中返回。
字段 | 类型 | 非空 | 描述 |
---|---|---|---|
access_token | String | 是 | 授权令牌,Access_Token |
expires_in | String | 是 | 该access_token的有效期,单位为秒 |
refresh_token | String | 在刷新访问存根步骤中,获取新存根时需要提供的参数 | |
openid | String | 是 | 用户唯一标识 |
result_code | String | 是 | 错误码 |
message | String | 错误消息 |
示例:初次获取存根
假设厂商配置的“访问/刷新存根URL”是http://third.com/oauth2.0/get_access_token
。
请求示例:
http://third.com/oauth2.0/get_access_token
?grant_type=authorization_code
&client_id=${AppKey}
&client_secret=${AppSecret}
&code=${AuthCode}
&redirect_uri=none
为了显示清晰,给请求URL加了换行,使用直请自行改为一行。
示例:刷新存根
假设厂商配置的“访问/刷新存根URL”是http://third.com/oauth2.0/get_access_token
。
请求示例:
http://third.com/oauth2.0/get_access_token
?grant_type=refresh_token
&client_id=${AppKey}
&client_secret=${AppSecret}
&refresh_token=${AuthCode}
为了显示清晰,给请求URL加了换行,使用直请自行改为一行。
获取用户信息服务
请求参数
请求参数以QueryString的方式连接在“访问/刷新存根URL”后
方法:POST
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
access_token | String | 是 | 授权令牌,Access_Token。 |
openid | String | 是 | 用户标识 |
响应参数
响应参数以JSON对象格式在Body中返回。
字段 | 类型 | 非空 | 描述 |
---|---|---|---|
openid | String | 是 | 用户标识,与账号系统内部的用户应该是一对一映射。在智能人居开放平台的用户服务中,也会建立一对一的映射。 |
nick_name | String | 是 | 用户名称,但建议填写姓名 |
mobile | String | 用户手机号,要求唯一; | |
avatar_url | String | 用户头像,需要厂商提供可以从Internet访问的URL地址。 | |
gender | String | 是 | - 1:男 - 2:女 - 0:未知 |
result_code | String | 是 | 错误码 |
message | String | 错误消息 |
重点:
openId在API服务用户信息中会用到。当hidType=OPEN时,hid就是openId,代表一个用户。
openId也可以通过标识转换服务转换成统一用户标识(identityId)。
示例
假设厂商配置的“获取用户信息URL”是http://third.com/oauth2.0/get_user_info
。
请求示例:
http://third.com/oauth2.0/get_user_info
?access_token=${AccessToken}
&openid=${OpenID}
为了显示清晰,给请求URL加了换行,使用直请自行改为一行。
响应示例:
{
"result_code":"0",
"message":"成功",
"openid":" OPENID",
"nick_name":"NICKNAME",
"mobile":"1xxx",
"avatar_url":"image.com/xxxx.png",
"gender":"1"
}
错误码
结果码 | 说明 |
---|---|
0 | 成功 |
100001 | AccessToken过期 |
100002 | 用code换取access token值失败 |
100003 | RefreshToken已过期或已失效 |
100004 | 用户改密或解除授权导致AccessToken失效 |
100005 | AccessToken非法 |
100006 | 无效的OpenId |
110000 | 系统通用错误(无法一一列出其他所有错误,需联系三方ISV) |