智能家居授权方式
智能家居授权方式
1.概述
2.鉴权流程
3.开发商需实现的授权接口
- 3.1 获取授权码
- 3.2 通过code换取访问令牌
- 3.3 刷新访问令牌
1. 概述
家居技能的授权采用OAuth2.0授权协议的授权码模式,此方式可以让DUI Service在不获取合作方用户名和密码的前提下,向开发商的服务器请求用户授权的资源。
协议规范请参考OAuth2.0官方网站:https://oauth.net/2/
2. 鉴权流程
3. 开发商需实现的授权接口
3.1 获取授权码
请求
GET /%third-party-service-url%?state=x&client_id=x&response_type=code&scope=s1,s2&redirect_uri=url_encode(https://dcas.dui.ai/account-link/v1/skill/skid123)
参数名 | 说明 | 是否必填 |
---|---|---|
client_id | 表示AISPEECH平台在外部平台的标识 | 是 |
state | 由AISPEECH生成,认证服务器会原封不动地返回这个值 | 是 |
response_type | 授权类型,固定为code | 是 |
scope | 表示申请的权限范围,使用“,”分隔,可选项 | 否 |
redirect_uri | 经过urlEncode后的AISPEECH ACCOUNT LINK SERVER地址 | 是 |
响应
HTTP/1.1 302 Temporary Redirect
Location: https://cgw.duiopen.com/account-link/v1/skill/skid123?state=x&code=x
成功
http status 302
头部的Location字段放入url_decode之后的redirect_uri
并在redirect_uri的query string附加state,code
eg: https://cgw.duiopen.com/account-link/v1/skill/skid123?state=x&code=x
失败
http status 500
3.2 通过code换取访问令牌
请求
GET /%third-party-service-url%?grant_type=authorization_code&code=x&client_id=x&client_secret=x&redirect_uri=x
参数名 | 说明 | 是否必填 |
---|---|---|
grant_type | 始终为 "authorization_code" | 是 |
code | 外部平台返回的授权码 | 是 |
client_secret | 外部平台颁发给AISPEECH的秘钥 | 否 |
client_id | 表示AISPEECH平台在外部平台的标识 | 是 |
redirect_uri | 经过 urlEncode 后的 AISPEECH ACCOUNT LINK SERVER 地址 | 是 |
响应
成功
http status 200
{
"access_token":"x",
"refresh_token":"x",
"expires_in":x
}
失败
http status 非200
参数名 | 说明 | 是否必填 |
---|---|---|
access_token | 访问服务时需持有的token | 是 |
refresh_token | 刷新access_token时需使用的token | 是 |
expires_in | access_token过期时间, 单位秒 | 是 |
3.3 刷新访问令牌
请求
GET /%third-party-service-url%?grant_type=refresh_token&refresh_token=x&client_id=x&client_secret=x&scope=x
参数名 | 说明 | 是否必填 |
---|---|---|
grant_type | 始终为 "refresh_token" | 是 |
refresh_token | 申请token时返回的refresh_token,用于刷新token | 是 |
client_id | 表示AISPEECH平台在外部平台的标识 | 否 |
client_secret |
外部平台颁发给AISPEECH的秘钥 |
否 |
scope | scope 权限,空格分隔的权限列表 | 否 |
响应
成功
http status 200
{
"access_token":"x",
"refresh_token":"x",
"expires_in":x
}
失败
http status 非200
参数名 | 说明 | 是否必填 |
---|---|---|
access_token | 访问服务时需持有的token | 是 |
refresh_token | 刷新access_token时需使用的token | 是 |
expires_in | access_token过期时间, 单位秒 | 是 |