云智慧(北京)科技有限公司邓超
说起oauth2.0,我相信很多人对其已经非常熟悉,并且已经应用在很多开放平台上,如新浪微博开放平台,腾讯微博开放平台等;下面我将我个人对于Oauth2的理解以及Oauth2在监控宝开放平台上的是如何运用的做一下简单的阐述,有说的不到位的地方还望指点。
官方定义:
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
OAuth 2.0是OAuth协议的下一版本,但不向下兼容OAuth 1.0。OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
个人理解:
Oauth2.0就是一个互联网标准协议(基于https) ,可以让用户来实现跨平台数据共享。
比如有2个平台A和B,在A平台上有一些数据资源,现在B平台想拿到A平台上的某些数据资源,如果此时A平台支持Oauth2协议,那么B平台就可以通过协议向A平台请求相应的数据资源应用的B平台上。
OAuth在"客户端"与"资源服务端"之间,设置了一个授权层(authorization layer)。其过程如图(来自RFC 6749 ):
(A)“客户端”向“资源所属者”发出授权请求
(B)“资源所属者”同意给“客户端”授权
(C)“客户端”获得授权后向“认证服务端”请求令牌
(D)“认证服务端”向“客户端”发放令牌(Access Token)
(E)“客户端”通过令牌向“资源服务端”请求资源
(F)“资源服务端”确认令牌无误,向“客户端”发放资源
从以上步骤可以看出,“客户端”想拿到资源,关键点在于“资源所属者”的授权,只有拿到了授权,才可以进行接下来的步骤。
OAuth 2.0定义了四种授权方式:
§ A、授权码模式(authorization code)
授权码模式(authorization code)的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。
§ B、简化模式(implicit)
简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在 浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤。所有步骤在浏览器中 完成,令牌对访问者是可见的,且客户端不需要认证。
§ C、密码模式(resource owner passwordcredentials)
密码模式(Resource Owner Password Credentials Grant)中,用户向 客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授 权。
§ D、客户端模式(client credentials
客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是 以用户的名义,向"服务提供商"进行认证。
§ 目前监控宝的API平台只对监控宝企业用户开发,而不对所有监控宝用户开发。基于这种情况,Oauth的密码授权模式比较适合(注:通过账号和密码,平台就可以认证是否为监控宝企业用户,从而来判断是否给予授权),所以我们果断采用了这种授权方式。
监控宝API平台简化了授权过程,平台将每一个企业账号当做一个客户端,并自动为其生成一个唯一的授权标识,所以每一个客户端可以直接向平台认证服务端请求令牌,然后通过令牌向平台资源服务端请求资源。如图(监控宝API平台认证过程):
关于监控宝API平台请具体参考:
http://www.jiankongbao.com/common/api_interface
关于作者:
邓超,云智慧软件开发工程师,2010年毕业于秦皇岛燕山大学,2012年初加入云智慧(北京)科技有限公司。目前主要负责监控宝产品架构的优化与研发。