智能家居授权方式

智能家居授权方式

1.概述

2.鉴权流程

3.开发商需实现的授权接口

  • 3.1 获取授权码
  • 3.2 通过code换取访问令牌
  • 3.3 刷新访问令牌

1. 概述

家居技能的授权采用OAuth2.0授权协议的授权码模式,此方式可以让DUI Service在不获取合作方用户名和密码的前提下,向开发商的服务器请求用户授权的资源。

协议规范请参考OAuth2.0官方网站:https://oauth.net/2/

2. 鉴权流程

Minion

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过期时间, 单位秒