涂鸦基于OAuth2在开发者平台上的探索与实践

前言
开发授权(OAuth2)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资料(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth2允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
理解OAuth2协议

- 资源所有者(resource owner)
- 客户端/第三方应用(client/App)
- 资源服务器(resource server)
- 授权服务器(authorization Server)
客户端应用程序必须首先向与资源服务器关联的授权服务器注册。这通常是一项一次性任务,一旦注册,除非客户申请注册撤销,否则注册仍然有效。在注册时,授权服务器为客户端应用程序分配了客户端ID和客户端密钥(密码)。客户端ID和密码对于该授权服务器上的客户端应用程序是唯一的。
典型流程
- 授权码模式(Authorization Code Grant)
授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。
这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。
- 隐藏式(implicit)
有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。
- 密码式(Password Credentials Grant)
如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。
- 凭证式(Client Credentials Grant)
最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。
涂鸦主要授权
云开发平台 提供不同品类、不同通讯能力的设备以支持创客及厂商在各种家庭、商业和城市场景应用。云开发平台借助于涂鸦成熟的 IoT 服务,结合不同对接场景,提供了多种对接模式。
简单模式(隐式授权)
云开发平台提供了基于 OAuth 2.0 协议的对接方法。开发人员可以在涂鸦 AI+IoT 开发平台申请云 API,根据涂鸦 API 接口规范调用涂鸦 API,获取开发人员的用户和设备数据,并通过权限控制设备。说明:例如,开发人员可以在平台上将其涂鸦智能 App 用户账号扫码授权(或者创建 OEM 应用程序和产品),通过帐户获取用户数据或设备数据。
授权码模式(显式授权)开发期待中
在 云开发平台 应用云 API 密钥后,开发人员可以基于涂鸦 API 接口规范调用涂鸦开放接口,以获取授权下的资源数据。说明:授权码方式主要应用于没有在涂鸦 AI+IoT 开发平台中创建 OEM 应用的云集成场景。
OAuth2之涂鸦云开发平台
便捷的使用和操作
云开发平台是涂鸦打造的物联网云端开放平台,为各行业应用开发者、设备制造商、方案商提供了包含 OpenAPI 在内的各类云端服务,覆盖了设备控制、全屋管理、场景自动化等核心场景的通用能力,并整合了智慧安防、智慧商照、智慧社区、智慧酒店、智慧公寓等垂直领域的 PaaS 能力。基于云开发平台及配套技术服务,开发者可以围绕 Powered by Tuya 设备快速构建智慧城市、智慧商业、智慧工业等各行业解决方案。
在涂鸦云开发平台中,为了使用开发平台提供的API(应用程序接口),你需要先创建一个项目。云开发项目是IoT平台资源(设备、API权限、数据资产等)的集合,不同云开发项目之间的资源相互隔离。我们会给每一个项目一个专属的Client ID和Client Secret。

ID跟Secret的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将ID和secret结合,为你发出的每个请求添加签名,以此来向涂鸦开发平台表明自己身份的合法性。
涂鸦开发平台上的这些操作,对应上图的(1)、(2)、 (3)和(4)步骤,我们通过开发平台上的ID和Secret就可以拿到Access Token。
拿到Access Token之后,开发者可通过调用 API 的形式实现内部业务逻辑的开发。设备状态监听以消息队列的方式进行开放,以满足第三方开发者对设备状态的监听,用于实现不同设备间的联动。
丰富的资源和接口
配网管理
随着产品配网方式丰富度的提高,云开发平台对主流配网能力进行了迭代,提供了权限管理接口来满足不同配网方式的诉求,例如 Wi-Fi 配网、蓝牙配网、蓝牙 & Wi-Fi 双模配网等方式。
API 列表
| 请求方式 | API | 设备类型 | 接口说明 |
|---|---|---|---|
| POST | /v1.0/device/paring/token | 普通设备 | 生成配网令牌。 |
| GET | /v1.0/device/paring/tokens/{token} | 普通设备 | 获取配网设备列表。 |
| PUT | /v1.0/devices/{device_id}/enabled-sub-discovery | Zigbee 设备 | 开放网关允许子设备入网。 |
| GET | /v1.0/devices/{device_id}/list-sub | Zigbee 设备 | 获取当前入网的子设备列表。 |
| GET | /v1.0/devices/{device_id}/sub-devices | Zigbee 设备 | 获取网关下的子设备列表。 |
设备控制
获取设备控制相关的指令集、规格属性、最新状态,以及下发设备指令的接口。
| 请求方式 | API | 描述 |
|---|---|---|
| GET | /v1.0/functions/{category} | 按品类获取指令集 |
| GET | /v1.0/devices/{device_id}/functions | 按设备获取指令集 |
| GET | /v1.0/devices/{device_id}/specifications | 获取设备规格属性(包含指令集和状态集) |
| POST | /v1.0/devices/{device_id}/commands | 下发设备指令 |
| GET | /v1.0/devices/{device_id}/status | 获取设备最新状态 |
设备管理
...
大家可以注册涂鸦IoT平台,体验涂鸦基于OAuth2在开发者平台上的探索和实践,也感受下其给开发者留的众多丰富的接口!
引用和更多文章
(1) OAuth2.0的一个简单解释
(2) OAuth2.0的四种方式
(3) OAuth2.0 wiki文档
(4) 涂鸦云开发平台授权管理
涂鸦基于OAuth2在开发者平台上的探索与实践的更多相关文章
- (转) Android平台上关于IM的实践总结
前言 IM通信在互联网发展到现在已经是码农的世界里人尽皆知的技术,特别在当下移动互联网迅猛发展的时代这种技术的开发也更加火热,其中老牌的代表作就有QQ和MSN,和最近新崛起的微信,默默,易信,来往等眼 ...
- 如何在Twitter开发者平台上注册自己的应用
1.打开twitter的官网https://dev.twitter.com,如果还没有注册账号的,需要注册账号,已经注册账号的,请先登录:2.选择其中的My apps,如下图: 3.进去界面,选择Cr ...
- 美团 iOS 端开源框架 Graver 在动态化上的探索与实践
近些年,移动端动态化技术可谓是“百花齐放”,其中的渲染性能也是动态化技术一直在探索.研究的课题.美团的开源框架 Graver 也为解决动态化框架的渲染性能问题提供了一种新思路:关于布局,我们可以采用“ ...
- 基于 Istio 的全链路灰度方案探索和实践
作者|曾宇星(宇曾) 审核&校对:曾宇星(宇曾) 编辑&排版:雯燕 背景 微服务软件架构下,业务新功能上线前搭建完整的一套测试系统进行验证是相当费人费时的事,随着所拆分出微服务数量的不 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-S ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...
- 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序
关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...
- 基于ThinkPHP3的微信平台开发_1
微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...
- JVM 平台上的各种语言的开发指南
JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...
随机推荐
- HDU4565-数学推导求递推公式+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4565 我们带着这个根号是没法计算的 我们仔细观察一下,(a+sqrt(b))^n用二项式定理展开,我 ...
- Git使用指南(下)
9 初识分支 把每一次的提交,都用线连起来,你会发现,很连贯. C/C++ 指针的概念 git reset --hard commitid HEAD 如果说内容已经add到暂存区,此时要想 ...
- Linux 驱动框架---驱动中的异步
异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬 ...
- μC/OS-III---I笔记12---任务管理
任务管理任务切换应该算是UCOS最基本的部分,首先保存当前任务寄存器的内容到当前任务的堆栈:接着弹出即将进行的任务的堆栈内容到寄存器中然后就是按寄存器内容执行,这个过程成为上下文切换.任务堆栈在创建任 ...
- CS144学习(2)TCP协议实现
Lab1-4 分别是完成一个流重组器,TCP接收端,TCP发送端,TCP连接四个部分,将四个部分组合在一起就是一个完整的TCP端了.之后经过包装就可以进行TCP的接收和发送了. 代码全部在github ...
- flex 布局占位符
flex 布局占位符 空 span bug .popover-custom-class .system-guide-container .buttons-box { display: flex; fl ...
- RESTful 架构 && RESTful API
RESTful 架构 && RESTful API REpresentational State Transfer (REST) 具象状态传输https://en.wikipedia. ...
- flex & flex-wrap
flex & flex-wrap https://css-tricks.com/almanac/properties/f/flex-wrap/ https://developer.mozill ...
- project config generator
project config generator React, Vue, https://createapp.dev/ parcel https://parceljs.org/ https://git ...
- py pandas
import pandas as pd class Main(): def __init__(self): # 读取excel self.df = pd.read_excel("C:\\Us ...