蘇州科技大學(xué)信息建設(shè)與管理中心 袁海峰 胡 銳
蘇州科技大學(xué)天平學(xué)院 郁 蔥
基于OAuth2.0的高校數(shù)據(jù)中心Open API的設(shè)計(jì)與實(shí)現(xiàn)
蘇州科技大學(xué)信息建設(shè)與管理中心 袁海峰 胡 銳
蘇州科技大學(xué)天平學(xué)院 郁 蔥
隨著校園信息化建設(shè)的發(fā)展,應(yīng)用系統(tǒng)的增加,數(shù)據(jù)共享變的必不可少,建設(shè)共享的公共數(shù)據(jù)平臺(tái)越來(lái)越受到學(xué)校信息化建設(shè)者的青睞。公共數(shù)據(jù)平臺(tái)做為唯一的數(shù)據(jù)出口為第三方應(yīng)用提供數(shù)據(jù)服務(wù),數(shù)據(jù)共享就面臨著數(shù)據(jù)安全問題,如何安全的提供給第三方使用,是現(xiàn)在校園信息化建設(shè)存在的普遍問題。本文提出一種基于OAuth 2.0的校園數(shù)據(jù)安全認(rèn)證系統(tǒng),數(shù)據(jù)的擁有者通過(guò)認(rèn)證服務(wù)器在使用數(shù)據(jù)的過(guò)程中給需要訪問資源的第三方授權(quán)訪問該數(shù)據(jù)的權(quán)限,有效的控制了數(shù)據(jù)安全問題。
OAuth2.0;數(shù)據(jù)安全;認(rèn)證系統(tǒng)
近年來(lái),學(xué)校信息化的發(fā)展作為學(xué)校自身發(fā)展一部分,越來(lái)越受到學(xué)校管理者的重視。學(xué)校的數(shù)據(jù)成指數(shù)增長(zhǎng),產(chǎn)生了大量的個(gè)人數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)[1],這些數(shù)據(jù)存放在公共數(shù)據(jù)平臺(tái)。目前很多學(xué)校都是采用開放訪問公共數(shù)據(jù)平臺(tái)數(shù)據(jù)庫(kù)權(quán)限的方式,給第三方提供數(shù)據(jù)服務(wù),這種方式是非常不安全,使公共數(shù)據(jù)平臺(tái)時(shí)刻處在風(fēng)險(xiǎn)之中。因此開發(fā)一套安全可靠校園數(shù)據(jù)安全認(rèn)證系統(tǒng)是非常用必要的。
根據(jù)OAuth2.0協(xié)議的開發(fā)的公共數(shù)據(jù)平臺(tái)的Open API,其API授權(quán)的方式與以往的授權(quán)方式不同之處是 OAuth 的授權(quán)不會(huì)使第三方觸及到用戶的用戶名與密碼等敏感信息,即第三方無(wú)需使用用戶的用戶名與密碼就可以申請(qǐng)獲得該用戶資源的授權(quán)[2]。
OAuth 2.0是OAuth協(xié)議的下一版本,但不向前兼容 OAuth 1.0。和 OAuth 1.0相比,OAuth 2.0關(guān)注客戶端開發(fā)者的簡(jiǎn)易性,同時(shí)為Web應(yīng)用、桌面應(yīng)用和手機(jī)應(yīng)用提供專門的認(rèn)證流程[3]。2012年10月,OAuth 2.0協(xié)議正式發(fā)布為RFC 6749[4]。
OAuth 2.0有四種角色,分別是資源所有者(Resource Owner),資源服務(wù)器(Resource Server),客戶端(Client)和認(rèn)證服務(wù)器(Authorization Server)[5]。資源所有者:能授權(quán)訪問受保護(hù)資源的一個(gè)實(shí)體[6],如公共數(shù)據(jù)平臺(tái)用戶2153。資源服務(wù)器:存儲(chǔ)資源的服務(wù)器[7],比如存儲(chǔ)2153個(gè)人信息,客戶端通過(guò)出示 Access Token(訪問令牌)進(jìn)行訪問。客戶端:經(jīng)過(guò)授權(quán)后,代表資源所有者訪問資源服務(wù)器上受限制的資源。認(rèn)證服務(wù)器:對(duì)資源所有者進(jìn)行認(rèn)證,向客戶端發(fā)放Access Token(訪問令牌)。
以蘇州科技大學(xué)為例,Open API是公共數(shù)據(jù)平臺(tái)的基礎(chǔ)搭建設(shè),通過(guò)認(rèn)證服務(wù)器給第三方應(yīng)用授權(quán)訪問公共數(shù)據(jù)平臺(tái) API的權(quán)限,如圖1所示。
(1)公共數(shù)據(jù)平臺(tái)的數(shù)據(jù)是通過(guò)Oracle ODI同步于校內(nèi)各應(yīng)用系統(tǒng),作為校內(nèi)資源存儲(chǔ)者,在這里充當(dāng)Open API系統(tǒng)的資源服務(wù)器。
(2)Web API提供公共數(shù)據(jù)數(shù)據(jù)平臺(tái)API接口給第三方應(yīng)用。
(3)認(rèn)證服務(wù)器給第三方應(yīng)用進(jìn)行認(rèn)證,發(fā)放令牌,授權(quán)訪問公共數(shù)據(jù)數(shù)據(jù)平臺(tái)API。
通過(guò)OAuth2.0模式打造自己的Web api認(rèn)證服務(wù),用于其第三方訪問我們的api時(shí)進(jìn)行權(quán)限認(rèn)證。
(1)用戶首先要保持登錄,即已認(rèn)證通過(guò)的狀態(tài);
(2)第三方應(yīng)用請(qǐng)求用戶授權(quán)(我理解是彈出一個(gè)顯示的操作界面讓用戶確認(rèn)給第三方授權(quán));
(3)用戶授權(quán)成功之后會(huì)向Authorization Server(認(rèn)證服務(wù)器)請(qǐng)求“授權(quán)碼”(指authorization_code而不是最終的access_token),請(qǐng)求中還會(huì)攜帶redirect_uri(跳轉(zhuǎn)至第三方應(yīng)用的鏈接);
(4)獲得“授權(quán)碼”之后用戶所在的瀏覽器網(wǎng)頁(yè)將跳轉(zhuǎn)到redirect_uri(即第三方應(yīng)用)
(5)第三方應(yīng)用攜帶“授權(quán)碼”和應(yīng)用認(rèn)證信息(client_id &client_secret)到Authorization Server換取access_token;
(6)第三方應(yīng)用就可以在訪問開放平臺(tái)時(shí)帶上access_token。
圖1 Open API結(jié)構(gòu)示意圖
以開源DotNetOpenAuth為基礎(chǔ)設(shè)計(jì)的基于OAuth2.0的校園認(rèn)證系統(tǒng),包括客戶端,授權(quán)服務(wù)端和資源服務(wù)端三方面的實(shí)同。
(1)對(duì)客戶端來(lái)說(shuō),授權(quán)的過(guò)程就是獲取AccessToken的過(guò)程,DotNetOpenAuth.OAuth2.Client是DotNetOpenAuth給C#客戶端提供的默認(rèn)SDK。
(2)授權(quán)服務(wù)端交互最多是客戶端于是定義一個(gè)client類,調(diào)用DotNetOpenAuth.OAuth2.IClientDescription接口, IClientDescription接口定義。DotNetOpenAuth預(yù)定義了一個(gè)接口——IAuthorization-ServerHost,當(dāng)授權(quán)通過(guò)后,通過(guò)CreateAccessToken生成AccessToken并返回給客戶端,客戶端于是就可以用AccessToken訪問資源服務(wù)端了。AuthorizationServerDescription包含兩個(gè)屬性,AuthorizationEndpoint是用戶顯式授權(quán)的地址,一般即用戶輸用戶名密碼的地;TokenEndpoint是用授權(quán)碼換取AccessToken的地址,注意該地址須用POST請(qǐng)求。
(3)在所有的授權(quán)模式下,資源服務(wù)端都只專注一件和OAuth相關(guān)的事情——驗(yàn)證AccessToken。
授權(quán)服務(wù)地址的 URL地址:http∶//210.*.*.*∶8080/OAuth/tokenclient_id:ustsapp;client_secret:1;grant_type:client_credentialspost 到授權(quán)服務(wù)務(wù)獲得access_token,token_type,expires_in,如圖2所示。
圖2
訪問資源服務(wù)器,URL:http∶// 210.*.*.*∶8070/api/Values?user=user&pwd=passwd
圖3
Authorization:“token_type” + “空格” + “access_token”,如圖3所示。Auth軟件,實(shí)現(xiàn)了對(duì)高校數(shù)據(jù)中惦OpenAPI系統(tǒng)。通過(guò)該系統(tǒng)的為第三訪提供統(tǒng)一數(shù)據(jù)認(rèn)證和數(shù)據(jù)使用授權(quán),極大的保證了數(shù)據(jù)安全性和可信性。同時(shí)該系統(tǒng)具有可擴(kuò)展性、可靠性和經(jīng)濟(jì)性等特點(diǎn),能夠滿足高?,F(xiàn)階段信息化建設(shè)的需求。
[1]胡銳,胡伏原,陳麗春.基于Hadoop的高校公共數(shù)據(jù)平臺(tái)的構(gòu)建[J].蘇州科技學(xué)院學(xué)報(bào)(自然科學(xué)版),2015,32(3):52-53.
[2]時(shí)子慶,劉金蘭,譚曉華.基于OAuth2.0的認(rèn)證授權(quán)技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(3):260-264.
[3]盧慧鋒,趙文濤,孫志峰,游超.社會(huì)化網(wǎng)絡(luò)服務(wù)中OAuth2.0的應(yīng)用研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(S1):50-54.
[4]IETF:The OAuth 2.0 Authorization Framework[EB/OL].[2012-11].https://tools.ietf.org/html/rfc6749.
[5]俞曉,左友東,YUXiao,ZUOYou-Dong[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(8):59-62.
[6]沈海波,陳強(qiáng),陳勇昌.基于OAuth2.0擴(kuò)展的客戶端認(rèn)證方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2017,38(2):350-354.
[7]時(shí)子慶,劉金蘭,譚曉華.基于OAuth2_0的認(rèn)證授權(quán)技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(3):260-264.
袁海峰(1977—),男,漢族,河南周口人,大學(xué)本科,工程師;主要研究方向和關(guān)注領(lǐng)域:高校網(wǎng)絡(luò)建設(shè)。
該系統(tǒng)在根據(jù)OAuth2.0的規(guī)范,通過(guò)調(diào)用開源的DotNetOpen-