涂鸦基于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语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...
随机推荐
- springboot项目打war包
spring官方教程地址(包含打war包和打jar包的):https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#b ...
- μC/OS-III---I笔记11---就绪任务列表管理
就绪优先级为映像响表 在UCOSIII内,任务调度是要先找到优先级最高的任务,然后执行.理论上对于UCOSIII可以有无数个优先级,每个优先级又可以有无数个任务但是对于这么多的任务如何快速查到到当先就 ...
- 蓝湖 UI 设计稿上如何生成渐变色和复制渐变色
蓝湖 UI 设计稿上如何生成渐变色和复制渐变色 Sketch 生成渐变色 不要上传图片,切图 如果是切图,切图模式下就不会生成 css 代码了 复制渐变色 OK .button { width: 28 ...
- CDN 工作原理剖析
CDN 工作原理剖析 CDN / Content Delivery Network / 内容分发网络 https://www.cloudflare.com/zh-cn/learning/cdn/wha ...
- VSCode & outline & source code
VSCode & outline & source code Dart 源码学习 outline 速览 dart-core List class instance-methods ht ...
- 人物传记——Kyle Tedford:持之以恒的品质从哪里来?
心理学家表示,95%的人类行为发生在无意识中,而大多数这种行为是由习惯引起的.习惯,就像我们大脑设定的程序.通过每日持续努力,你会把坚持的习惯节奏慢慢进入身体中,并且会很容易加持下去. 做事三分钟热度 ...
- Matplotlib 图表绘制工具学习笔记
import numpy as np import matplotlib.pyplot as plt import pandas as pd arr1 = np.random.rand(10)#一维数 ...
- IO多路复用之select、poll、epoll
本文转载自IO多路复用之select.poll.epoll 导语 IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. ...
- HTTP 1.x 学习笔记 —— Web 性能权威指南
HTTP 1.0的优化策略非常简单,就一句话:升级到HTTP 1.1.完了! 改进HTTP的性能是HTTP 1.1工作组的一个重要目标,后来这个版本也引入了大量增强性能的重要特性,其中一些大家比较熟知 ...
- 微信小程序:删除时提示是否删除
代码如下: wx.showModal({ title: '提示', content: '确定要删除吗?', success: function (sm) { if (sm.confirm) { // ...