APP下载

Android平台下基于OAuth2.0协议的三方认证技术研究与实现

2014-04-29徐丽仙

计算机时代 2014年12期
关键词:用户名服务提供者应用程序

徐丽仙

摘  ;要: 三方认证协议OAuth不会让第三方涉及到用户名和密码等用户私密信息,在第三方不需要使用用户名和密码的情况下就可以得到用户的访问授权,具有简单、安全、开放等特点,在实际中得到广泛应用。该协议已经成为开放资源授权的标准。文章以最新的OAuth2.0版本为对象,研究了其认证过程,并在Android平台上以腾讯微博为例实现了相关功能。

关键词: OAuth2.0; 认证过程; Android; 腾讯微博

中图分类号:TP309  ;  ;  ;  ;  ;文献标志码:A  ;  ; 文章编号:1006-8228(2014)12-19-03

Research and implementation of three party certification technology

based on OAuth2.0 protocol on the Android platform

Xu Lixian

(Yangzhou Polytechnic College, Yangzhou, Jiangsu 225009, China)

Abstract: The three party authentication protocol based on OAuth will not allow the third party to be involved in user's secret information such as user name and password. It has the characteristics of simple, safety, opening and widely used in practice. It has become the standard of open resource authorization. In this paper, the authentication process based on the latest version of OAuth2.0 is researched. The related functions are realizedon Tencent micro-blog on the platform of Android.

Key words: OAuth2.0; authentication process; Android; Tencent micro-blog

0 引言

随着互联网技术的发展,各种社区论坛、电子商务、微博等应用也来越多。这些应用都需要通过用户名和密码进行身份验证登录,一个人可能拥有多个用于登录不同应用的用户名和密码,这容易混淆和遗忘。当前普遍采用OAuth协议解决这样的问题,OAuth协议为开放平台提供具有安全性和开放性的用户资源授权和身份认证的标准。该协议通过服务提供方进行用户身份认证,即在作为第三方的应用程序中利用服务提供方的用户名和密码验证登录到该应用程序,而第三方无权知晓其密码等信息,在保证安全性的同时,减少了繁琐的认证过程。本文研究OAuth2.0协议相关技术,并应用该协议在基于Android的应用系统中实现其功能。

1 OAuth2.0协议

OAuth(Open Authorization)即开放授权协议[1],是一种采取简单和标准方式从Web、移动和桌面等应用进行安全认证的开放协议。它是一种安全机制,主要用于第三方无需使用用户的用户名与密码就可以申请获得该用户在服务提供方的资源授权。其当前版本2.0与1.0不兼容,1.0协议每个Token需要加密,2.0采用http协议,具有更高的安全性。

OAuth2.0协议从客户端的多样性考虑,提供授权码、资源拥有者密码证书、客户端私有证书、断言证书、刷新令牌等多种方式获取访问令牌,而1.0只有用户授权流程一种方式。

1.1 OAuth2.0认证过程中的角色

在安全认证过程[2]中主要有服务提供者(Service Provider)、用户(User)、客户(Consumer)等角色。

服务提供者,指的是如腾讯、新浪、网易等一些提供OAuth平台的网站,它们需要用户名和密码确认用户身份才能获取受限制的一些共享文件等资源。

用户,是服务提供者相关网站的用户名和密码的拥有者。用户可以将网站上对外不公开的相关私人信息在一定的限度共享给其他用户网站。

客户,即需要访问用户信息的第三方应用程序,主要指前面提及的Web应用程序、桌面应用程序和手机中的Android、Ios等移动应用程序。客户如要取得相关资源必须首先要得到授权。

这三者间的处理过程如图1所示。

在此过程中,当用户向第三方(客户)请求服务时,第三方必须交由服务提供者,由服务提供者再向用户进行身份验证,获得授权后将该授权告知客户,最后用户得到访问权限。

[服务提供者

(Service Provider)][用户

(User)][1.请求认证][6.服务用户] [用户资源

2.请求访问][3.验证可否访问][4.User授权访问][5.获取授权][客户

(Consumer)]

图1  ;处理工作过程

1.2 OAuth2.0主要认证流程

主要认证流程[3]大致分为如下四个步骤:

⑴ 得到授权码code;

⑵ 获得Accesstoken;

⑶ 由Accesstoken取得OpenID;

⑷ 通过Accesstoken、OpenID、API函数,获得用户授权资源信息。

1.3 获取Accesstoken过程

Accesstoken即访问令牌,它是第三方应用程序获得用户认证授权的凭证,目前广泛采用的是OAuth2.0协议进行授权,与先前的方法相比不但进行了简化而且增加了安全性。

用户主要采用两种方式由OAuth2.0授权第三方,从而获取Accesstoken。它们是Authorization code grant方式和Implicit grant方式,分别适用于不同的场合。前者适用于有第三方Server端的情况,由第三方Server集中处理客户端的授权请求和结果;后者授权用在无Server端的应用,授权是有客户端发起的,并由客户端管理Accesstoken。这两种模式只是在授权时存在差异,在后续实现时对API的调用并无区别。

⑴ Authorization cod模式

该模式在取得code后,再由code换取Accesstoken。其流程如图2所示。

[Resource

Owner][

User-Agent

][Authorization

Server][A][A][B][C][B][C][D][E][Client

客户]

图2  ;Authorization cod模式流程

A、 Client Identifier&;Redirection URI

B、 User authenticates

C、 Authorization Code

D、 Authorization Code&; Redirection URI

E、 Access Token

⑵ Implicit模式

Implicit模式流程如图3所示。

[Resource

Owner][User-Agent

F ][A][A][B][C][B][G][D][E][Client

客户] [

Authorization

Server][Web-Hosted

Client

Server]

图3  ;Implicit模式流程

A、 Client Identifier&;Redirection URI

B、 User authenticates

C、 Redirection URI with Access Token in Fragment

D、 Redirection URI without Fragment

E、 Script

G、 Access Token

2 腾讯微博OAuth2.0认证应用

本文以腾讯微博推出的OAuth2.0协议这一新的认证机制[4]为例研究实现登录过程的原理。

2.1 腾讯微博开放平台介绍

腾讯微博开放系统为开发人员和使用人员提供了一个丰富的平台,用于数据的共享与传播。可以通过系统所提供的API实现大量应用,但事先必须要登录平台并取得App Key和App Secret。若第三方应用程序访问微博账号进行操作都必须首先采用OAuth机制得到该账号本人授权。最终在第三方应用程序中可用微博账号和密码登录,实现对微博信息的读写,并在授权信息和账号之间建立并记录了对应关系。

2.2 注册用户并申请App Key和App Secret

App Key和App Secret是腾讯微博开放平台提供给开发用户的用户名和密码,需要通过该平台的审核才能实现微博登录。注册成为开发人员后,再通过http://dev.t.qq.com/development的链接网页,选择“创建应用”,由于将来是在Android手机平台上进行相关开发,我们选择无线应用选项。需要填写应用名称、应用网址,选择应用分类(如生活、游戏、工具等)和应用平台(iPhone或Android),接受相关协议并提交。最终获得如下App Key和App Secret。

3 基于Android平台开发过程

3.1 开发平台搭建

本文所研究的是在基于Android平台的手机应用程序中实现OAuth2.0认证机制。本系统采用的是Eclipse所提供的框架服务,它是一个开放源码、基于Java设计语言,通过组建构建开发环境的可扩展性平台。因此为了能够完成开发工作必须对其环境进行配置,其中包括安装提供Java运行环境、工具和基础类等功能的JDK,为开发人员提供基于Android操作系统进行程序开发的工具服务的ADT,还需要安装基于Android开发工具包集合的特定软件包SDK。

3.2 Android版SDK开发包

在设计过程中,根据本应用的特定性,必须要到指定网站下载支持腾讯微博和Android平台的SDK开发包,开发包中包含了大量用于相关操作的API。提供的下载地址为:http://wiki.open.t.qq.com/index.php/SDK%E4%B8%8B%E8%BD%BD。下载的SDK(Tencent_Weibo_Android_Open_SDK_V2.0.jar)中主要有三个JAR包文件,Android开发依赖包commons-httpclient-3.0.1.jar,封装腾讯微博常用API接口的Android_SDK.jar和Android_SDK_component.jar包。它们需要通过Add to Bulid Path方法加入到开发环境中才能完全实现其功能。同时SDK的开发环境满足如下要求:

⑴ Java SDK V5及以上;

⑵ Android SDK 2.2(Level18)及以上;

⑶ 依赖包:httpmime-4.1.3.jar。

3.3 SSO实现

SSO即单点登录(Single Sign On)[5],一种用于将登录映射到其他相互信任的应用系统的机制。要实现其功能,首先修改Android_SDK.jar包config文件夹下的config.properties文件,其中App_Key和App_Key_Sec分别变为前面所取得的App Key和App Secret。回调地址REDIRECT_URI为空值。

在AuthHelper类的register方法中实现OnAuthListener监听。在该监听功能中若授权认证成功,则在上下文context中对WeiboToken的参数以键-值对的形式进行保存,并在需要时可在接口参数中获取context。

验证成功保存简要代码举例如下[6]:

Public void onAuthPassed (String nam,WeiboToken token) {

Toast.makeText(MainPage_Activity.this,passed,1000).show();

Util.saveSharePersistent(context, "ACCESS_TOKEN",

token.accessToken);

Util.saveSharePersistent(context,"EXPIRES_IN",

String.valueOf(token.expiresIn));

Util.saveSharePersistent(context, "OPEN_ID", token.openID);

Util.saveSharePersistent(context, "REFRESH_TOKEN", " ");

Util.saveSharePersistent(context, "CLIENT_ID",

Util.getConfig().getProperty("APP_KEY"));

Util.saveSharePersistent(context, "AUTHORIZETIME",

String.valueOf(System.currentTimeMilliis()/10001));

}

初始化时,在单击监听器事件中授权与启动SSO方法,简要代码举例如下:

long appid=Long.valueOf(Util.getCongfig()

.getProperty("APP_KEY"));

String app_secket=Util. getCongfig()

.getProperty("APP_KEY_SEC");

auth(appid,app_secket);

当单点登录成功后,如应用程序调用腾讯微博相关接口时,则通过addParam方法在对应类中取得Oauth值(存放于context中的键值对)来实现。获取context后,调用腾讯微博接口。

4 结束语

三方认证技术具有一定的便利性和安全保密性。本文以目前国际普遍最新采用的OAuth2.0授权协议为研究对象,将其与1.0版本进行了比较,研究了其认证过程中的相关角色定义及其相互关系,在研究主要认证流程的同时,以腾讯微博中的认证为例,研究了如何利用OAuth2.0协议实现在第三方应用程序中无需输入用户名和密码等敏感信息而能够让该应用程序获得相关访问授权的功能。本文目前只是研究了其中简单的一部分,更多的功能应用和对OAuth2.0的优化问题将在今后作进一步研究。

参考文献:

[1] 张天琪.OAuth协议安全性研究[J].技术研究,2013.3:68-70

[2] 刘镝,张智江,张尼.基于国内开放平台的Oauth认证框架研究[J].信

息通信技术,2011.6:43-46

[3] 时子庆,刘金兰,谭晓华.基于OAuth2.0的认证授权技术[J].计算机系

统应用,2012.3:260-264

[4] 刘大红,刘明.第三方应用与开放平台OAuth认证互连技术研究[J].

电脑知识与技术,2012.8:5367-5369

[5] González JF, Rodríguez MC, Nistal ML, et al. Reverse OAuth: A

solution to achieve deleated authorizations in single sign-on e-learning systems. Computers &; Security,2009.28:43-856

[6] Tencent.腾讯微博开发平台[EB/OL]. http://dev.t.qq.com,

2014-09-10.

猜你喜欢

用户名服务提供者应用程序
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
网络服务提供者的侵权责任研究
《护士进修杂志》投稿程序
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
论网络服务提供者刑事责任的归责模式一一以拒不履行网络安全管理义务罪为切入点
机智的快递员
论网络服务提供者的侵权责任
网络服务提供者第三方责任的立法审视