APP下载

基于OAuth2.0的认证授权方案设计与优化

2018-11-16毛道鹤

软件 2018年10期
关键词:令牌服务端开发者

吴 德,应 毅,毛道鹤



基于OAuth2.0的认证授权方案设计与优化

吴 德,应 毅,毛道鹤

(三江学院 计算机科学与工程学院,江苏 南京 210012)

OAuth 2.0是由互联网工程任务组于2012年10月发表在RFC-6749规范文档中定义的认证授权协议,是一种基于HTTP重定向实现的开放授权框架。它允许第三方应用访问该用户在某一网站上存储的特定资源,而无需将用户名和密码提供给第三方应用,大幅提升用户的WEB应用体验。为深入研究OAuth 2.0协议的工作原理,使用Nginx 服务器、MySQL和Redis数据库设计了一个开放授权应用框架,同时指出OAuth 2.0协议应用在授权流程中的不足之处,并给出基于WebSocket监听机制的优化解决方案,为认证授权应用的开发提供参考。

RFC-6479;OAuth 2.0;认证;授权

0 引言

OAuth协议为用户资源的授权提供了一个安全、开放而又简易的标准。OAuth的授权使得第三方应用无需使用用户的用户名与密码就可以申请获得该用户资源的授权[1]。

OAuth 2.0协议于2012年10月正式发布,作为OAuth 1.0的升级版本却并不向下兼容OAuth 1.0协议[2]。OAuth 2.0协议更加关注客户端开发的简易性,同时为移动设备、Web应用、桌面应用等多种客户端提供认证授权服务[3]。

目前,国内外各大主流互联网公司如腾讯、新浪、豆瓣、Facebook、Google等均已支持OAuth 2.0协议[4-6]。通过在其开发者平台上提供基于OAuth 2.0的开放授权 OpenAPI,由客户端开发者调用,便可以向市场上的其它中小型应用分享其海量的用户数据。通过这种方式,不同厂家不同类型的应用只要遵循OAuth 2.0协议流程,就可以引入各大主流网站的用户资源,简化登录流程,优化用户体验,从而提高应用的可用性和用户的活跃度。

1 OAuth 2.0原理

OAuth 2.0授权框架允许第三方应用代表资源所有者通过合法地协调资源所有者和HTTP服务之间交互,或者仅代表第三方应用本身,对Web服务进行有限地访问。该协议允许用户通过授权的方式让第三方应用访问该用户在某一网站上存储的私密资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用[7]。

OAuth 2.0协议使得用户通过令牌(而不是用户名和密码)来有限地访问存储在特定服务提供者那里的数据。每一个令牌授权一个特定的网站在特定的时段(例如,接下来的120分钟内)内访问特定的资源(例如仅限于某一相册中的照片)。

OAuth 2.0协议定义了四个角色,分别是:

(1)Resource Owner:资源所有者,是一个能授予访问受保护资源权限的实体。当资源所有者是人类的时候,它被称为终端的用户。

(2)Resource Server:资源服务器,是一个托管了受保护资源,能接收和响应使用访问令牌访问受保护资源请求的服务器。

(3)Client:客户端,是代表 Resource Owner,使用其授权许可获取受保护资源的第三方应用。服务端程序或桌面应用或移动设备,都可以是OAuth 2.0协议流程中的客户端。

(4)Authorization Server:授权服务器,是指在 Client认证成功,并获取了 Resource Owner 的授权之后,颁发访问令牌给 Client 的服务器。

上述四个角色的交互流程如图 1 所示。

图1 OAuth 2.0交互流程

基本流程包括以下步骤:

(1)Client向Resource Owner请求授权许可。授权请求可以如图1所示直接发送给Resource Owner,但最好是间接地通过 Authorization Server 请求授权。

(2) Client接收到一个代表 Resource Owner授权的授权许可,通常以协议规范中定义的四种许可类型之一表示。授权许可的类型由Client请求授权和 Authorization Server 所支持的类型决定。

(3)Client向Authorization Server认证身份,并通过展示授权许可请求访问令牌。

(4)Authorization Server 认证Client身份并验证其授权许可,若认证成功则颁发访问令牌。

(5) Client通过展示访问令牌向Resource Ser­ver请求受保护资源。

(6)Resource Server验证请求中访问令牌,若验证成功则响应Client请求。

为了获取访问令牌,客户端需要向用户获取授权。而用户授权则以授权许可的形式向客户端授予访问受保护资源的权限。OAuth 2.0 协议中共定义了授权码、隐式授权、用户密码凭据和客户端凭据等四种类型的授权许可。

2 基于OAuth2.0的设计框架

OAuth 2.0的协议只是规定了相关规范,但不同开发者的实现细节却是大同小异[8][9]。表1列举了几个知名网站中 OAuth 2.0实现方式。

表1 知名网站的OAuth 2.0实现

Tab.1 OAuth 2.0 implementation of well known websites

可以看出,这些厂商的OAuth 2.0服务大多数都支持授权码形式的授权许可和刷性令牌的操作,却都不支持用户密码凭证形式的授权许可,而且其客户端的认证方式大多限于Basic和POST方式。

依据OAuth 2.0协议流程,通过授权码形式的授权许可获取访问令牌,从而向客户端提供访问受保护资源的能力,并支持刷新令牌操作,使客户端在得知访问令牌失效之后,可使用刷新令牌再度获取访问令牌。为保证OAuth 2.0应用的安全性,在设计时重点考虑以下环节的技术实现方案:

(1)全站配置HTTPS。可以使用Nginx为相关域名配置SSL证书,并将相关域名的HTTP访问请求自动重定向到HTTPS请求,以保证请求数据在网络传输过程中的安全性。

(2)客户端回调URI的验证。

(3)访问令牌中包含的授权信息验证。解决该问题的关键在于,客户端注册时授权服务器须在持久化的关系型数据库中记录其填写的回调URI,并在客户端获取授权码和访问令牌的时候,充分验证其请求参数中的回调 URI。

(4)访问令牌的访问范围和访问有效期验证。这些问题均由访问令牌的易变性产生。为了保证访问令牌在协议请求过程中的稳定性和可用性,OAuth 2.0 应用开发者可以在应用中引入 Redis 内存数据库,将访问令牌和其授权信息存储在 Redis 中,并为其设置一定的有效期。授权服务器和资源服务器就可以通过共同操作Redis数据库,达到同时限制客户端访问令牌(刷新令牌)的目的。

总体设计架构如图2所示。

图2 基于OAuth2.0的总体设计架构图

其中,Nginx服务器负责配置全站HTTPS,并实现对授权服务器和资源服务器的反向代理。授权服务器负责接收来自Nginx的客户端认证授权请求,授予客户端授权码和访问令牌(刷新令牌)。资源服务器负责接受客户端携带访问令牌的请求,验证其访问令牌的正确性,并响应其一定范围内的受保护资源请求。MySQL 数据库负责存储第三方应用数据和用户信息数据。Redis 数据库负责存储带有访问范围和访问有效期的客户端授权码和访问令牌(刷新令牌)。

3 存在的问题

上述实现方案存在一个问题:由于OAuth 2.0是基于用户代理重定向的协议,这决定了客户端和OAuth 2.0认证授权服务只能通过 HTTP 重定向来交换数据,这使得客户端应用在授权登录之后,仍滞留着用户未登录之前的页面,从而导致较差的用户体验。具体表现为:当第三方应用登录成功之后,在浏览器中会存在两个历史标签页,其中第一个标签页是用户未登录之前的页面,另一个标签页则是用户登录之后的页面。

4 方案优化策略

产生登录前页面滞留的问题根本原因在于OAuth 2.0协议流程中繁琐的用户代理重定向,导致了第三方应用在启动协议流程时发起的请求无法在协议流程的末尾时恰当地接收OAuth 2.0应用回传的数据。一种合适解决办法是引入一种可在客户端和服务端之间建立双向通讯的消息监听机制,在授权过程中根据监听到的第三方应用的消息回传事件做出相应的处理。WebSocket 就是满足以上需求的一种支持全工双向通讯的网络协议,目前主流浏览器都已经支持WebSocket[10]。优化后的设计方案如图3所示。

该方案基于原有OAuth 2.0协议交互模式,在第三方应用的客户端和服务端建立WebSocket连接。若第三方应用服务端在接收到来自OAuth Server的返回数据,第三方应用则会向其客户端发送一条消息。第三方应用客户端始终处于监听其服务端消息的状态,若接收到一条消息,则表示OAuth Server向第三方应用返回数据成功。通过在第三方应用客户端和服务端之间建立WebSocket连接,第三方应用便可以快速且不受限制地得知OAuth Server对第三方应用请求的响应状态,进而采取相应的动作以消除滞留的登录之前的网页。

图3 优化方案原理图

5 结论

基于OAuth 2.0协议规范设计了一个基于用户信息为中心数据的OAuth 2.0认证授权应用框架,分析了由于OAuth 2.0协议的机制原因导致的用户在授权登录过程中出现的历史页面滞留问题,并给出一个合理可行的优化方案,即通过引入双向通讯 WebSocket 技术来简化常规应用中OAuth 2.0协议的开发流程。本设计方案旨在为使用OAuth2.0协议的开发者提供参考。

[1] 时子庆, 刘金兰, 谭晓华. 基于OAuth2.0的认证授权技术[J].计算机系统应用, 2012年03期: 260-264.

[2] Microsoft. RFC 6479-2012 The OAuth 2.0 Authorization Framework[S]. ISSN: 2070-1721.

[3] MTI Systems. RFC 6750-2012. The OAuth 2.0 Authorization Framework: Bearer Token Usage[S]. ISSN: 2070-1721.

[4] 微信. 微信公众平台开发者文档[OL]. (2017-05-05). https://mp.weixin.qq.com/wiki/home.

[5] Google. Using OAuth 2.0 to Access Google APIs[OL](2017-05-05). https://developers.google.com/identity/protocols/OAuth2.

[6] 豆瓣. 了解Auth2.0[OL]. (2017-05-05).https://developers. douban.com/wiki/?title=oauth2.

[7] 维基百科. OAuth[OL]. (2017-01-27). https://zh.wikipedia. org/zh-hans/OAuth.

[8] 魏成坤, 刘向东, 石兆军. 基于OAuth2.0的认证授权技术研究[J]. 信息网络安全, 2016年09期: 6-11.

[9] 卢慧锋, 赵文涛, 孙志峰, 游超. 社会化网络服务中OAuth2.0的应用研究与实现[J]. 计算机应用. 2014, 34(S1): 50-54.

[10] Google. RFC 6455-2011. The WebSocket Protocol[S]. ISSN 2070-1721.

Design and Optimization of Authentication and Authorization Scheme Based on OAuth2.0 Protocol

WU De, YING Yi, MAO Dao-he

(College of Computer Science and Engineering, Sanjiang University, Nanjing, Jiangsu 210012, China)

The OAuth 2.0 is a certification of authorization protocol defined in the RFC-6749 specification document published by the Internet Engineering Task Force in October 2012. The OAuth 2.0 is a kind of open authorization framework based on HTTP redirection implementation, which allows the third party applications to access the user’s specific resources stored on a web site without having to provide the user name and password to the third party applications. The application of OAuth 2.0 protocol highly promotes the user experience of WEB application. In order to deeply study the working principle of OAuth 2.0 protocol, an open authorization application framework is designed using Nginx server, MySQL and Redis database. At the same time, the deficiencies of OAuth 2.0 protocol in the authorization process are pointed out, and an optimization solution based on WebSocket monitoring mechanism is presented which provides reference for the development of authentication authorization application.

RFC-6479; OAuth 2.0; Authentication; Authorization

TP391.41

A

10.3969/j.issn.1003-6970.2018.10.003

江苏省现代教育技术课题(批准号:2017-R-59217)、江苏省高等学校自然科学研究项目(批准号:17KJB520033)

吴德(1978-),男,讲师,主要研究方向:数据挖掘与智能计算;应毅(1979-),男,副教授,主要研究方向:大数据与云计算;毛道鹤(1994-),男,工程师,主要研究方向:Java应用开发。

吴德,应毅,毛道鹤. 基于OAuth2.0的认证授权方案设计与优化[J]. 软件,2018,39(10):10-13

猜你喜欢

令牌服务端开发者
称金块
基于路由和QoS令牌桶的集中式限速网关
动态令牌分配的TCSN多级令牌桶流量监管算法
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
iOS开发者调查
iOS开发者调查
栝楼产业开发者谢献忠
令牌在智能小区访客系统的应用