徐麗仙
摘 ?;要: 三方認證協(xié)議OAuth不會讓第三方涉及到用戶名和密碼等用戶私密信息,在第三方不需要使用用戶名和密碼的情況下就可以得到用戶的訪問授權,具有簡單、安全、開放等特點,在實際中得到廣泛應用。該協(xié)議已經(jīng)成為開放資源授權的標準。文章以最新的OAuth2.0版本為對象,研究了其認證過程,并在Android平臺上以騰訊微博為例實現(xiàn)了相關功能。
關鍵詞: 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 引言
隨著互聯(lián)網(wǎng)技術的發(fā)展,各種社區(qū)論壇、電子商務、微博等應用也來越多。這些應用都需要通過用戶名和密碼進行身份驗證登錄,一個人可能擁有多個用于登錄不同應用的用戶名和密碼,這容易混淆和遺忘。當前普遍采用OAuth協(xié)議解決這樣的問題,OAuth協(xié)議為開放平臺提供具有安全性和開放性的用戶資源授權和身份認證的標準。該協(xié)議通過服務提供方進行用戶身份認證,即在作為第三方的應用程序中利用服務提供方的用戶名和密碼驗證登錄到該應用程序,而第三方無權知曉其密碼等信息,在保證安全性的同時,減少了繁瑣的認證過程。本文研究OAuth2.0協(xié)議相關技術,并應用該協(xié)議在基于Android的應用系統(tǒng)中實現(xiàn)其功能。
1 OAuth2.0協(xié)議
OAuth(Open Authorization)即開放授權協(xié)議[1],是一種采取簡單和標準方式從Web、移動和桌面等應用進行安全認證的開放協(xié)議。它是一種安全機制,主要用于第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶在服務提供方的資源授權。其當前版本2.0與1.0不兼容,1.0協(xié)議每個Token需要加密,2.0采用http協(xié)議,具有更高的安全性。
OAuth2.0協(xié)議從客戶端的多樣性考慮,提供授權碼、資源擁有者密碼證書、客戶端私有證書、斷言證書、刷新令牌等多種方式獲取訪問令牌,而1.0只有用戶授權流程一種方式。
1.1 OAuth2.0認證過程中的角色
在安全認證過程[2]中主要有服務提供者(Service Provider)、用戶(User)、客戶(Consumer)等角色。
服務提供者,指的是如騰訊、新浪、網(wǎng)易等一些提供OAuth平臺的網(wǎng)站,它們需要用戶名和密碼確認用戶身份才能獲取受限制的一些共享文件等資源。
用戶,是服務提供者相關網(wǎng)站的用戶名和密碼的擁有者。用戶可以將網(wǎng)站上對外不公開的相關私人信息在一定的限度共享給其他用戶網(wǎng)站。
客戶,即需要訪問用戶信息的第三方應用程序,主要指前面提及的Web應用程序、桌面應用程序和手機中的Android、Ios等移動應用程序??蛻羧缫〉孟嚓P資源必須首先要得到授權。
這三者間的處理過程如圖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函數(shù),獲得用戶授權資源信息。
1.3 獲取Accesstoken過程
Accesstoken即訪問令牌,它是第三方應用程序獲得用戶認證授權的憑證,目前廣泛采用的是OAuth2.0協(xié)議進行授權,與先前的方法相比不但進行了簡化而且增加了安全性。
用戶主要采用兩種方式由OAuth2.0授權第三方,從而獲取Accesstoken。它們是Authorization code grant方式和Implicit grant方式,分別適用于不同的場合。前者適用于有第三方Server端的情況,由第三方Server集中處理客戶端的授權請求和結果;后者授權用在無Server端的應用,授權是有客戶端發(fā)起的,并由客戶端管理Accesstoken。這兩種模式只是在授權時存在差異,在后續(xù)實現(xiàn)時對API的調(diào)用并無區(qū)別。
⑴ 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協(xié)議這一新的認證機制[4]為例研究實現(xiàn)登錄過程的原理。
2.1 騰訊微博開放平臺介紹
騰訊微博開放系統(tǒng)為開發(fā)人員和使用人員提供了一個豐富的平臺,用于數(shù)據(jù)的共享與傳播??梢酝ㄟ^系統(tǒng)所提供的API實現(xiàn)大量應用,但事先必須要登錄平臺并取得App Key和App Secret。若第三方應用程序訪問微博賬號進行操作都必須首先采用OAuth機制得到該賬號本人授權。最終在第三方應用程序中可用微博賬號和密碼登錄,實現(xiàn)對微博信息的讀寫,并在授權信息和賬號之間建立并記錄了對應關系。
2.2 注冊用戶并申請App Key和App Secret
App Key和App Secret是騰訊微博開放平臺提供給開發(fā)用戶的用戶名和密碼,需要通過該平臺的審核才能實現(xiàn)微博登錄。注冊成為開發(fā)人員后,再通過http://dev.t.qq.com/development的鏈接網(wǎng)頁,選擇“創(chuàng)建應用”,由于將來是在Android手機平臺上進行相關開發(fā),我們選擇無線應用選項。需要填寫應用名稱、應用網(wǎng)址,選擇應用分類(如生活、游戲、工具等)和應用平臺(iPhone或Android),接受相關協(xié)議并提交。最終獲得如下App Key和App Secret。
3 基于Android平臺開發(fā)過程
3.1 開發(fā)平臺搭建
本文所研究的是在基于Android平臺的手機應用程序中實現(xiàn)OAuth2.0認證機制。本系統(tǒng)采用的是Eclipse所提供的框架服務,它是一個開放源碼、基于Java設計語言,通過組建構建開發(fā)環(huán)境的可擴展性平臺。因此為了能夠完成開發(fā)工作必須對其環(huán)境進行配置,其中包括安裝提供Java運行環(huán)境、工具和基礎類等功能的JDK,為開發(fā)人員提供基于Android操作系統(tǒng)進行程序開發(fā)的工具服務的ADT,還需要安裝基于Android開發(fā)工具包集合的特定軟件包SDK。
3.2 Android版SDK開發(fā)包
在設計過程中,根據(jù)本應用的特定性,必須要到指定網(wǎng)站下載支持騰訊微博和Android平臺的SDK開發(fā)包,開發(fā)包中包含了大量用于相關操作的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開發(fā)依賴包commons-httpclient-3.0.1.jar,封裝騰訊微博常用API接口的Android_SDK.jar和Android_SDK_component.jar包。它們需要通過Add to Bulid Path方法加入到開發(fā)環(huán)境中才能完全實現(xiàn)其功能。同時SDK的開發(fā)環(huán)境滿足如下要求:
⑴ Java SDK V5及以上;
⑵ Android SDK 2.2(Level18)及以上;
⑶ 依賴包:httpmime-4.1.3.jar。
3.3 SSO實現(xiàn)
SSO即單點登錄(Single Sign On)[5],一種用于將登錄映射到其他相互信任的應用系統(tǒng)的機制。要實現(xiàn)其功能,首先修改Android_SDK.jar包config文件夾下的config.properties文件,其中App_Key和App_Key_Sec分別變?yōu)榍懊嫠〉玫腁pp Key和App Secret?;卣{(diào)地址REDIRECT_URI為空值。
在AuthHelper類的register方法中實現(xiàn)OnAuthListener監(jiān)聽。在該監(jiān)聽功能中若授權認證成功,則在上下文context中對WeiboToken的參數(shù)以鍵-值對的形式進行保存,并在需要時可在接口參數(shù)中獲取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));
}
初始化時,在單擊監(jiān)聽器事件中授權與啟動SSO方法,簡要代碼舉例如下:
long appid=Long.valueOf(Util.getCongfig()
.getProperty("APP_KEY"));
String app_secket=Util. getCongfig()
.getProperty("APP_KEY_SEC");
auth(appid,app_secket);
當單點登錄成功后,如應用程序調(diào)用騰訊微博相關接口時,則通過addParam方法在對應類中取得Oauth值(存放于context中的鍵值對)來實現(xiàn)。獲取context后,調(diào)用騰訊微博接口。
4 結束語
三方認證技術具有一定的便利性和安全保密性。本文以目前國際普遍最新采用的OAuth2.0授權協(xié)議為研究對象,將其與1.0版本進行了比較,研究了其認證過程中的相關角色定義及其相互關系,在研究主要認證流程的同時,以騰訊微博中的認證為例,研究了如何利用OAuth2.0協(xié)議實現(xiàn)在第三方應用程序中無需輸入用戶名和密碼等敏感信息而能夠讓該應用程序獲得相關訪問授權的功能。本文目前只是研究了其中簡單的一部分,更多的功能應用和對OAuth2.0的優(yōu)化問題將在今后作進一步研究。
參考文獻:
[1] 張?zhí)扃?OAuth協(xié)議安全性研究[J].技術研究,2013.3:68-70
[2] 劉鏑,張智江,張尼.基于國內(nèi)開放平臺的Oauth認證框架研究[J].信
息通信技術,2011.6:43-46
[3] 時子慶,劉金蘭,譚曉華.基于OAuth2.0的認證授權技術[J].計算機系
統(tǒng)應用,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.騰訊微博開發(fā)平臺[EB/OL]. http://dev.t.qq.com,
2014-09-10.