开发平台的Oauth2.0

物联网平台开发过程中,为了把自己平台的能力提供出去,或者把其它厂商的能力迁移到自己平台中,常用两种对接方式,一种是直连接入,一种是云云接入,而云云接入中常用的一种技术是Oauth2.0技术。今天我们来讲一讲这个技术。从下面3个方面讲解。

1.什么是oauth。
2.为什么出现这个技术。
3.如何应用这个技术。

一、这个技术是什么样的?
oauth是一个验证授权的开放标准。oauth2.0是应用之间彼此访问数据的开源授权协议。

二、为什么出现这个技术?
在oauth之前,HTTP Basic Authentication,用户通过输入账号和密码进行验证,为了解决第三方访问资源的安全性和灵活性,出现了oauth。

三、如何使用Oauth2.0
当一个客户端应用想要访问资源拥有者托管在资源服务器的资源时,客户端需要先获得授权,那么客户端如何获取授权呢?

授权流程

下图是一个常用的授权批准类型,即通过授权码进行授权。
开发平台的Oauth2.0
用授权码来授权批准原理如下:
资源拥有者(用户)访问客户端应用。客户端应用告诉用户通过授权服务器(如 Facebook, Google 和 Twitter 等)来登录到客户端应用。

为了通过授权服务器登录,用户通过客户端应用被重定向到授权服务器。客户端应用发送它的客户端标识给授权服务器,那么授权服务器就知道是哪个应用尝试访问受保护的资源。当被重定向回客户端应用时,授权服务器发送给用户特定的重定向 URL, 即客户端已经提前与授权服务器注册。随着重定向,授权服务器发送一个代表授权的授权码。

当在客户端应用的重定向 URL 被访问时,客户端应用直接连接授权服务器。客户端应用发送授权码,客户端标识及密钥,如果客户端应用能接受这些值,那么授权服务器返回一个访问令牌。

现在客户端应用就可以用该访问令牌请求资源服务器的资源了。该访问令牌可作为客户端授权和授权访问资源。

端点

OAuth 2.0定义了一系列端点。端点典型的就是web服务器上的URI。比如,一个Java Servlet, JSP page, PHP page, ASP.NET网页等等。
这些端点定义有:

  • 授权端点
  • 令牌端点
  • 重定向端点

授权端点和令牌端点都位于授权服务器上,重定向端点位于客户端应用上。每个端点都会在下面讲述。
这些端点在下图中阐释为:
开发平台的Oauth2.0OAuth 2.0规范没有描述这些端点怎么被发现或记录。这取决于实现者来决定。大多数网站都有一个子网站开发人员来记录这些端点。
授权端点
授权端点是资源拥有者所登录的授权服务器,并授权给客户端应用的端点。
令牌端点
令牌端点是在授权服务器上为了一个访问令牌,客户端应用要交换授权码,客户端标识和客户端密钥的端点。
重定向端点
重定向端点是在授权端点授权以后,资源拥有者被重定向到客户端应用的端点。

授权参数

授权码授权总共由2个请求和2个响应组成。一个授权请求+响应,和一个令牌请求+响应。 授权请求 授权请求被发送到授权端点以获取一个授权码。这是请求中用到的参数:

字段 说明
response_type 必须。必须被设置到代码里
client_id 必须。当客户端被注册时,授权服务器要标识的客户端。
redirect_uri 可选。通过客户端注册的重定向URI。
scope 可选。请求可能的作用域。
state 可选(推荐的)。任何需要被传递到客户端请求的URI客户端的状态。

令牌

令牌请求
一旦授权码被获取到了,客户端可以用它获取访问令牌。这是访问令牌请求参数:

字段 说明
grant_type 必须。必须被设置到授权码中。
code 必须。被授权服务器接收到的授权码。
redirect_uri 必须。如果请求URI包括在授权请求中,之后必须是相同的。

令牌响应
访问令牌请求的响应是包含访问令牌及一些更多信息的JSON字符串:

{
	"access_token" : "...",
	"token_type" : "...",
	"expires_in" : "...",
	"refresh_token" : "...",
}```
access_token属性是授权服务器分配的访问令牌。 
token_type是被授权服务器分配的令牌类型。 
expires_in属性是指访问令牌过多少秒后,就不再有效。访问令牌过期值是可选的。
refresh_token属性包含令牌过期后刷新的令牌。刷新的令牌用于,一旦响应返回的不再有效时,包含一个新的访问令牌。

参考文献:
Oauth2.0系列教程
美的IoT开放平台
极客时间《Oauth2.0实战课》

本文章来源于互联网,如有侵权,请联系删除!原文地址:开发平台的Oauth2.0