一種面向云平臺(tái)接口鑒權(quán)簽名方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)數(shù)據(jù)安全與管理技術(shù)領(lǐng)域,具體涉及一種面向云平臺(tái)接口鑒權(quán) 簽名方法。
【背景技術(shù)】
[0002] 隨著云計(jì)算和互聯(lián)網(wǎng)絡(luò)的蓬勃發(fā)展,許多系統(tǒng)和平臺(tái)都將面臨海量數(shù)據(jù),而且這 些數(shù)據(jù)量都以爆炸式的速度遞增,這直接導(dǎo)致許多軟件架構(gòu)越來越龐大,處理能力也越來 越強(qiáng),而支撐這些軟件運(yùn)行,為用戶提供服務(wù)的基礎(chǔ)正是這些龐大的海量數(shù)據(jù),對(duì)于軟件服 務(wù)而言,不僅需要面臨大量的數(shù)據(jù),還面臨著來自不同接口的數(shù)據(jù),包括來自不同業(yè)務(wù)系 統(tǒng)、分布式數(shù)據(jù)存儲(chǔ)等環(huán)境。
[0003]目前,對(duì)于來自單一接口的海量數(shù)據(jù),許多數(shù)據(jù)庫(kù)服務(wù)都提供了強(qiáng)大的處理能力, 但由于各個(gè)平臺(tái)都只保存了本系統(tǒng)的授權(quán)數(shù)據(jù)安全,而對(duì)于復(fù)雜的軟件系統(tǒng)而言,往往需 要同時(shí)處理來自不同系統(tǒng)的授權(quán)接口數(shù)據(jù),這就需要提供一種高效的接口鑒權(quán)簽名訪問方 法,同時(shí)需要保住在訪問過程中,這些不同的授權(quán)用戶數(shù)據(jù)相互隔離,互不影響,保證數(shù)據(jù) 的安全性和完整性。
[0004] 針對(duì)目前軟件系統(tǒng)日趨龐大,數(shù)據(jù)結(jié)構(gòu)越來越復(fù)雜,特別是云計(jì)算技術(shù)的發(fā)展,使 得軟件需要處理的數(shù)據(jù)來源不再是單一的目標(biāo)系統(tǒng),而可能是多個(gè)不同的平臺(tái)的協(xié)作,傳 統(tǒng)的接口訪問技術(shù)僅能在一個(gè)軟件系統(tǒng)中操作單個(gè)系統(tǒng)的接口,雖然有一些改進(jìn)技術(shù)可以 通過配置實(shí)現(xiàn)多個(gè)接口地址的訪問,但這些技術(shù)實(shí)質(zhì)上只是對(duì)單一接口訪問技術(shù)的簡(jiǎn)單擴(kuò) 展,需要事先指定需要訪問的接口、用戶名、密碼等相關(guān)的參數(shù),也就是說,必須事先設(shè)置目 標(biāo)接口參數(shù),不能統(tǒng)一的對(duì)接口鑒權(quán)進(jìn)行擴(kuò)展,這并不符合安全、便捷的接口訪問的要求。
[0005] 綜上所述,對(duì)接口鑒權(quán)簽名方法包括兩個(gè)方面:一是簽名串的生成,即通過申請(qǐng)的 SecretId組裝成平臺(tái)可識(shí)別的簽名串;二是接口查詢,即通過簽名串能夠有權(quán)限查詢目標(biāo) 數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供最一種利用加密技術(shù)、數(shù)據(jù)庫(kù)訪問 與多事務(wù)處理技術(shù),實(shí)現(xiàn)數(shù)據(jù)接口鑒權(quán)訪問,可保證訪問接口數(shù)據(jù)傳輸互不干擾,安全高速 的面向云平臺(tái)接口鑒權(quán)簽名方法。
[0007] 本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:一種面向云平臺(tái)接口鑒權(quán)簽名方 法,包括以下步驟:
[0008]S1、申請(qǐng)安全憑證:在統(tǒng)一云平臺(tái)中申請(qǐng)Secretld和SecretKey,其中,Secretld 是用于標(biāo)識(shí)API調(diào)用者的身份,SecretKey是用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字 符串的密鑰;
[0009]S2、生成簽名:根據(jù)S1申請(qǐng)的安全憑證,并結(jié)合區(qū)域參數(shù)、時(shí)間戳參數(shù)和隨機(jī)正整 數(shù)參數(shù)生成簽名;
[0010] S3、進(jìn)行接口調(diào)試測(cè)試:對(duì)生成的簽名進(jìn)行驗(yàn)證,簽名驗(yàn)證通過后即可以訪問云平 臺(tái)的接口。
[0011] 進(jìn)一步地,所述的步驟S2包括以下子步驟:
[0012] S21、對(duì)參數(shù)排序:對(duì)請(qǐng)求參數(shù)按參數(shù)名做字典序升序排列;
[0013] S22、拼接請(qǐng)求字符串:把S21排序好的請(qǐng)求參數(shù)格式化成key=vavlue的格式, 然后用拼接在一起;
[0014] S23、拼接簽名原文字符串:對(duì)簽名原文進(jìn)行拼接,得到簽名字符串,其拼接規(guī)則 為:請(qǐng)求方法+請(qǐng)求主機(jī)+請(qǐng)求路徑+ ?+請(qǐng)求字符串;
[0015] S24、生成簽名:云平臺(tái)API使用HMAC-SHA1算法對(duì)S23得到的簽名原文字符串進(jìn) 行加密,并結(jié)合SecretKey生成簽名:拼接簽名原文字符串+加密密鑰=獲取的簽名;
[0016] S25、添加簽名,向服務(wù)器發(fā)送驗(yàn)證請(qǐng)求。
[0017] 進(jìn)一步地,所述的步驟S24的生成簽名算法的具體實(shí)現(xiàn)過程如下:
[0018] S241、填充附加位:填充使消息報(bào)文長(zhǎng)度512取模余64bit,填充長(zhǎng)度范圍為1到 512,最高位為1,其余為0 ;
[0019] S242、附加報(bào)文長(zhǎng)度:把一個(gè)64bit塊的報(bào)文附加在上述報(bào)文之后,從而達(dá)到 512bit的倍數(shù);
[0020] S243、初始化MD緩沖區(qū):使用160位來存放哈希函數(shù)的初始變量、中間摘要及最終 摘要,緩存前進(jìn)行初始化,并給初始變量賦值;
[0021] S244、進(jìn)入消息處理主循環(huán),一次處理512bit,共有4輪,每輪20次操作;
[0022] S245、將初始變量的賦值級(jí)聯(lián)后作為初始輸出,消息處理主循環(huán)運(yùn)算完成后就輸 出160bit的消息摘要。
[0023] 進(jìn)一步地,所述的步驟S25包括以下步驟:
[0024] S251、請(qǐng)求參數(shù)中添加步驟S24生成的簽名,并且對(duì)簽名進(jìn)行UrlEncode,得到最 終的請(qǐng)求Url;
[0025] S252、發(fā)送HTTPS協(xié)議的請(qǐng)求即可得到JS0N字符串格式的接口返回值。
[0026] 本發(fā)明的有益效果是:提供了一種安全的接口鑒權(quán)訪問方法,可完成對(duì)云平臺(tái)中 所有提供的接口進(jìn)行安全的訪問與管理,利用加密技術(shù)、數(shù)據(jù)庫(kù)訪問與多事務(wù)處理技術(shù),實(shí) 現(xiàn)數(shù)據(jù)接口鑒權(quán)訪問,可根據(jù)軟件系統(tǒng)的需要擴(kuò)展接口的多重檢驗(yàn)方式,保證訪問接口數(shù) 據(jù)傳輸互不干擾,安全高速,從而克服傳統(tǒng)軟件對(duì)接口操作的單一性和低效性,可廣泛應(yīng)用 于需要同時(shí)訪問云平臺(tái)接口數(shù)據(jù)的軟件開發(fā)環(huán)境。
【附圖說明】
[0027] 圖1為本發(fā)明的接口鑒權(quán)簽名方法流程圖;
[0028] 圖2為本發(fā)明的單個(gè)512塊SHA-1處理邏輯圖。
【具體實(shí)施方式】
[0029] 本發(fā)明使用的現(xiàn)有技術(shù)主要涉及如下方面:
[0030] KSpringSecurity
[0031] SpringSecurity是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安 全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring控制反轉(zhuǎn)技術(shù)(InversionofControl),依賴注入(Dependency Injection)和面向切面編程技術(shù)功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能。
[0032] 2、HibernateValidator
[0033] 數(shù)據(jù)校驗(yàn)是任何一個(gè)應(yīng)用程序都會(huì)用到的功能,無論是顯示層還是持久層。相同 的校驗(yàn)邏輯會(huì)分散在各個(gè)層,開發(fā)人員經(jīng)常會(huì)把這些校驗(yàn)邏輯直接寫在領(lǐng)域模型里面,但 是這樣又把領(lǐng)域模型代碼和校驗(yàn)代碼混雜在了一起,而這些校驗(yàn)邏輯更應(yīng)該是描述領(lǐng)域模 型的元數(shù)據(jù)。
[0034] HibernateValidators是驗(yàn)證定義了元數(shù)據(jù)模型和API。默認(rèn)的元數(shù)據(jù)模型是通 過Annotations來描述的,但是也可以使用XML來重載或者擴(kuò)展。BeanValidationAPI并 不局限于應(yīng)用程序的某一層或者哪種編程模型。
[0035] 3、加密技術(shù)
[0036] HMAC:根據(jù)RFC2316(R印ortoftheIAB,April1998),HMAC(散列消息身份驗(yàn) 證碼:HashedMessageAuthenticationCode)以及IPSec被認(rèn)為是Interact安全的關(guān)鍵 性核心協(xié)議。它不是散列函數(shù),而是采用了將MD5或SHA1散列函數(shù)與共享機(jī)密密鑰(與公 鑰/私鑰對(duì)不同)一起使用的消息身份驗(yàn)證機(jī)制。基本來說,消息與密鑰組合并運(yùn)行散列 函數(shù)。然后運(yùn)行結(jié)果與密鑰組合并再次運(yùn)行散列函數(shù)。這個(gè)128位的結(jié)果被截?cái)喑?6位, 成為MAC.HMAC主要應(yīng)用在身份驗(yàn)證中,它的使用方法是這樣的:
[0037] 1、客戶端發(fā)出登錄請(qǐng)求(假設(shè)是瀏覽器的POST請(qǐng)求);
[0038] 2、服務(wù)器返回一個(gè)隨機(jī)值,并在會(huì)話中記錄這個(gè)隨機(jī)值;
[0039] 3、客戶端將該隨機(jī)值作為密鑰,用戶密碼進(jìn)行HMAC運(yùn)算,然后提交給服務(wù)器;
[0040] 4、服務(wù)器讀取用戶數(shù)據(jù)庫(kù)中的用戶密碼和步驟2中發(fā)送的隨機(jī)值做與客戶端一 樣的HMAC運(yùn)算,然后與用戶發(fā)送的結(jié)果比較,如果結(jié)果一致則驗(yàn)證用戶合法在這個(gè)過程 中,可能遭到安全攻擊的是服務(wù)器發(fā)送的隨機(jī)值和用戶發(fā)送的HMAC結(jié)果,而對(duì)于截獲了這 兩個(gè)值的黑客而言這兩個(gè)值是沒有意義的,絕無獲取用戶密碼的可能性,隨機(jī)值的引入使 HMAC只在當(dāng)前會(huì)話中有效,大大增強(qiáng)了安全性和實(shí)用性。大多數(shù)的語言都實(shí)現(xiàn)了HMAC算 法,比如php的mhash、python的HMAC.py、java的MessageDigest類,在web驗(yàn)證中使用 HMAC也是可行的,用js進(jìn)行md5運(yùn)算的速度也是比較快的。
[0041] HMAC_SHA1 :HMAC_SHA1(HashedMessageAuthenticationCode,SecureHash Algorithm)是一種安全的基于加密hash函數(shù)和共享密鑰的消息認(rèn)證協(xié)議。它可以有效地 防止數(shù)據(jù)在傳輸過程中被截獲和篡改,維護(hù)了數(shù)據(jù)的完整性、可靠性和安全性。HMAC_SHA1 消息認(rèn)證機(jī)制的成功在于一個(gè)加密的hash函數(shù)、一個(gè)加密的隨機(jī)密鑰和一個(gè)安全的密鑰 交換機(jī)制。
[0042] HMAC_SHA1其實(shí)還是一種散列算法,只不過是用密鑰來求取摘要值的散列算法。 HMAC_SHA1算法在身份驗(yàn)證和數(shù)據(jù)完整性方面可以得到很好的應(yīng)用,在目前網(wǎng)絡(luò)安全也得 到較好的實(shí)現(xiàn)。
[0043] 本發(fā)明米用SpringSecurity基于面向切面管理技術(shù)。HibernateValidators技 術(shù)可以實(shí)現(xiàn)在進(jìn)行API接口授權(quán)時(shí)對(duì)接口調(diào)用的參數(shù)進(jìn)行驗(yàn)證等操作。
[0044] 下面結(jié)合附圖進(jìn)一步說明本發(fā)明的技術(shù)方案。
[0045] 如圖1所示,一種面向云平臺(tái)接□鑒權(quán)簽名方法,包括以下步驟:
[0046]S1、申請(qǐng)安全憑證:在統(tǒng)一云平臺(tái)中申請(qǐng)Secretld和SecretKey,其中,Secretld 是用于標(biāo)識(shí)API調(diào)用者的身份,SecretKey是用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字 符串的密鑰;申請(qǐng)的Secretld和SecretKey分別是:
[0047]Secretld:CDKIu9ujbsJ5yKBZQpn74WFkmLPx2hjOjDBA;
[0048]SecretKey:Sr4d3gHBRNpq86cd98joQYCu2Dddh2eB;
[0049] S2、生成簽名:根據(jù)SI申請(qǐng)的安全憑證,并結(jié)合區(qū)域參數(shù)、時(shí)間戳參數(shù)和隨機(jī)正整 數(shù)參數(shù)生成簽名;以查詢實(shí)例列表請(qǐng)求為例,請(qǐng)求參數(shù)為:
[0050]方法名:Action=APIInstances
[0051]Secretld:SecretId=CDKIu9ujbsJ5yKBZQpn74WFkmLPx2hjOjDBA
[0052]時(shí)間戳:Timestamp= 1429509550
[0053]隨機(jī)正整數(shù):Nonce= 2046120730
[0054]區(qū)域:Region=sc
[0055] 步驟S2具體包括以下子步驟:
[0056]S21、對(duì)參數(shù)排序:對(duì)請(qǐng)求參數(shù)按參數(shù)名做字典序升序排列:
[0057] {'Action' :'APIInstances','Nonce' :2046120730, 'Region' :'sc','Secretld' :'CDKIu9ujbsJ5yKBZQpn74WF