專利名稱:基于服務(wù)器獲取認(rèn)證令牌的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及安全認(rèn)證技術(shù),尤其涉及一種基于服務(wù)器獲取認(rèn)證令牌的方法及系統(tǒng)。
背景技術(shù):
隨著計算機(jī)網(wǎng)絡(luò)通信技術(shù)的發(fā)展,通過點對點的技術(shù)來實現(xiàn)互聯(lián)網(wǎng)上的即時溝通的即時通信(IM, Instant Messaging)軟件工具應(yīng)用越來越普遍,IM已經(jīng)被大多數(shù)的用戶所接受并成為微博用戶日常生活以及工作中必不可少的一部分,用戶通過頂軟件,可以實現(xiàn)與朋友、同事以及同學(xué)之間的交流與溝通。微博服務(wù)器平臺作為IM工具應(yīng)用的一部分,對外以接口的方式向第三方提供豐富的功能接口,例如,對于第三方而言,可以采用開放授權(quán)(Oauth)的認(rèn)證方式,進(jìn)行認(rèn)證必選接口的調(diào)用,從而完成認(rèn)證。但在微博服務(wù)器平臺內(nèi)部,通常包含有多個服務(wù)器,為了擴(kuò)展服務(wù)器功能,要求認(rèn)證的第三方通過已認(rèn)證的服務(wù)器,能夠從其它服務(wù)器獲取該第三方請求的數(shù)據(jù)。這樣,為了保障數(shù)據(jù)交互的安全性,多個服務(wù)器之間也需要進(jìn)行相互安全認(rèn)證,即在微博服務(wù)器平臺內(nèi)部,各服務(wù)器需要建立相互信任關(guān)系,在建立相互信任關(guān)系的基礎(chǔ)上,對來自其他服務(wù)器的第三方進(jìn)行安全認(rèn)證,從而使得外部的第三方,通過Oauth的認(rèn)證方式,獲取服務(wù)器的調(diào)用權(quán)限,而基于微博服務(wù)器平臺內(nèi)部各服務(wù)器之間建立的相互信任關(guān)系,可以通過其他服務(wù)器,對服務(wù)器發(fā)送的認(rèn)證請求中攜帶的第三方信息,對該第三方進(jìn)行認(rèn)證,從而使該其他服務(wù)器獲取第三方所需的數(shù)據(jù),實現(xiàn)微博服務(wù)器平臺內(nèi)部服務(wù)器的功能擴(kuò)展。但是,其他服務(wù)器對該第三方的認(rèn)證,如果采用外部第三方與服務(wù)器通過Oauth認(rèn)證的方式,會出現(xiàn)重復(fù)認(rèn)證的問題,使得認(rèn)證過程較為繁瑣、認(rèn)證所需時間較長,使得認(rèn)證效率較低。為了減少認(rèn)證流程,微博服務(wù)器平臺內(nèi)部改進(jìn)的認(rèn)證方式是服務(wù)器雙方約定共同密鑰(secretKey),根據(jù)共同密鑰聯(lián)合請求參數(shù)生成簽名(sign),通過對sign的檢查,保證認(rèn)證請求的合法性,以確保建立相互信任關(guān)系,從而實現(xiàn)服務(wù)器間的安全調(diào)用。圖1為現(xiàn)有基于服務(wù)器的認(rèn)證方法流程示意圖。參見圖1,以服務(wù)器A (ServerA)以及服務(wù)器B (ServerB)為例,該流程包括步驟101, ServerA 與 ServerB 預(yù)先約定共同密鑰 secretKey ;步驟102, ServerA向ServerB發(fā)送認(rèn)證請求,攜帶第一簽名參數(shù);本步驟中,為了便于ServerB驗證請求來自與ServerA, ServerA需要傳送第一傳送參數(shù)(paraml)以及第二傳遞參數(shù)(param2),以便生成第一簽名參數(shù)signl = MD5_hash(paraml + param2 + secretKey),這樣,ServerB就可以采用同樣的算法,對sign進(jìn)行校驗。第一傳送參數(shù)、第二傳遞參數(shù)可以是經(jīng)過ServerA認(rèn)證的用戶標(biāo)識(ID)。較佳地,為了防止重放攻擊,在認(rèn)證請求中,還可以增加一個隨機(jī)參數(shù)random。這樣,ServerA向ServerB發(fā)送的認(rèn)證請求中,攜帶的參數(shù)包括random以及signl = MD5_hash (paraml + param2 + random + secretKey)。步驟103, ServerB接收ServerA認(rèn)證請求,根據(jù)認(rèn)證請求中攜帶的參數(shù)進(jìn)行認(rèn)證。本步驟中,如果認(rèn)證請求中,攜帶參數(shù)signl,則對signl進(jìn)行解析,得到paraml1、paraml 2,根據(jù)與ServerA相同的簽名算法,生成第二簽名參數(shù)sign2 = MD5_hash(paramlI + paraml2 + secretKey);如果認(rèn)證請求中,攜帶參數(shù)random以及signl,則對signl進(jìn)行解析,得到paraml1、paraml 2,根據(jù)與ServerA相同的簽名算法以及接收的random,生成第二簽名參數(shù)sign2 = MD5_hash (paramlI + paraml2 + random + secretKey)。比較第一簽名參數(shù)以及第二簽名參數(shù),如果相等,則認(rèn)證通過,否則,認(rèn)證不通過。由上述可見,現(xiàn)有基于服務(wù)器的認(rèn)證方法,只需服務(wù)器認(rèn)證雙方約定的共同密鑰不丟失,就可以簡單方便地保證認(rèn)證雙方通信的安全性,在一定程度上達(dá)到了服務(wù)器間輕量級快速認(rèn)證的需求,減少了認(rèn)證流程,但對secetKey的保密性要求較高,在當(dāng)前各公司人員流動較大的背景下,一旦有人員變動,為了防止公司數(shù)據(jù)信息的泄密,需要通過人工溝通,與認(rèn)證對方進(jìn)行協(xié)商,并更換預(yù)先協(xié)商的secretKey,從而造成認(rèn)證雙方頻繁的程序或配置更改,共同密鑰維護(hù)較為繁瑣;而如果不及時更換,又會導(dǎo)致認(rèn)證的安全性較低。
發(fā)明內(nèi)容
本發(fā)明的實施例提供一種基于服務(wù)器獲取認(rèn)證令牌的方法,實現(xiàn)自動配置共同密鑰,提高認(rèn)證的安全性。本發(fā)明的實施例還提供一種基于服務(wù)器獲取認(rèn)證令牌的系統(tǒng),實現(xiàn)自動配置共同密鑰,提高認(rèn)證的安全性。為達(dá)到上述目的,本發(fā)明實施例提供的一種基于服務(wù)器獲取認(rèn)證令牌的方法,包括 建立相互信任關(guān)系的第一服務(wù)器與第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,第二服務(wù)器生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;第一服務(wù)器接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。其中,所述方法進(jìn)一步包括第二服務(wù)器接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;第一服務(wù)器接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。其中,采用建立認(rèn)證令牌與服務(wù)器標(biāo)識的映射關(guān)系的方式,存儲所述認(rèn)證令牌。
其中,所述根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌包括第一服務(wù)器在對當(dāng)前認(rèn)證令牌進(jìn)行加密的同時或之后,用分配的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。其中,所述根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌包括將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲。其中,在所述分配當(dāng)前認(rèn)證令牌之后,對當(dāng)前認(rèn)證令牌進(jìn)行加密之前,該方法進(jìn)一步包括查詢是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。其中,通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成所述認(rèn)證屬性字符串包括通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要;
通過第一簽名摘要以及用戶標(biāo)識,生成第一認(rèn)證字符串;通過對第一認(rèn)證字符串進(jìn)行編碼,攜帶當(dāng)前認(rèn)證令牌標(biāo)識,生成認(rèn)證屬性字符串。其中,所述通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要包括采用消息摘要算法第五版哈希算法,對用戶標(biāo)識以及當(dāng)前認(rèn)證令牌進(jìn)行運算,得到第一簽名摘要。其中,所述認(rèn)證屬性字符串格式為String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8")),"utf-8");其中,Token表示采用Token認(rèn)證方式;new String (Base64. encodeBase64 (authStr. getByte ("utf_8")), " utf-8")表示采用8比特的Unicode的可變長度字符編碼對authStr進(jìn)行編碼。其中,所述進(jìn)行認(rèn)證屬性字符串驗證包括第一服務(wù)器獲取HTTP請求中攜帶的認(rèn)證屬性字符串,根據(jù)認(rèn)證屬性字符串中的Token,確定米用Token認(rèn)證方式,對認(rèn)證屬性字符串中的new String (Base64.encodeBase64 (authStr. getByte (〃utf_8〃)), 〃utf_8〃)進(jìn)行解碼,獲取 authStr,根據(jù)authStr的格式,分別獲取用戶標(biāo)識以及signStr,根據(jù)獲取的用戶標(biāo)識以及預(yù)先存儲的當(dāng)前認(rèn)證令牌,生成第二簽名摘要;比較弟一簽名摘要和弟_■簽名摘要是否相問,如果相問,表明認(rèn)證通過;如果不相同,表明認(rèn)證失敗。一種基于服務(wù)器獲取認(rèn)證令牌的系統(tǒng),該系統(tǒng)包括第一服務(wù)器以及第二服務(wù)器,其中,第一服務(wù)器,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。較佳地,所述第二服務(wù)器進(jìn)一步用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;相應(yīng)地,第一服務(wù)器進(jìn)一步用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。較佳地,所述第一服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求處理模塊以及驗證模塊,其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;
認(rèn)證請求處理模塊,用于接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌;驗證模塊,用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。較佳地,所述驗證模塊包括認(rèn)證屬性字符串獲取單元、解碼單元、第一簽名摘要獲取單元、第二簽名摘要獲取單元以及比較單元,其中,認(rèn)證屬性字符串獲取單元,用于接收HTTP請求,獲取HTTP請求中攜帶的認(rèn)證屬性字符串;解碼單元,用于根據(jù)認(rèn)證屬性字符串中的令牌標(biāo)識,確定采用令牌認(rèn)證方式,對認(rèn)證屬性字符串進(jìn)行解碼,獲取第一認(rèn)證字符串,輸出至第一簽名摘要獲取單元;第一簽名摘要獲取單元,用于根據(jù)認(rèn)證字符串的格式,從接收的第一認(rèn)證字符串中,分別獲取用戶標(biāo)識以及第一簽名摘要;第二簽名摘要獲取單元,用于根據(jù)第一簽名摘要獲取單元獲取的用戶標(biāo)識以及存儲模塊存儲的當(dāng)前認(rèn)證令牌,生成第二簽名摘要;比較單元,用于比較第一簽名摘要和第二簽名摘要是否相同,如果相同,表明認(rèn)證通過,進(jìn)行數(shù)據(jù)交互;如果不相同,表明認(rèn)證失敗,向第二服務(wù)器返回認(rèn)證失敗信息。較佳地,所述第二服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求模塊、認(rèn)證令牌更新模塊以及驗證請求模塊,其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;認(rèn)證請求模塊,用于在預(yù)先設(shè)置的時間周期到時,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;認(rèn)證令牌更新模塊,用于解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌;
驗證請求模塊,用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串。較佳地,所述認(rèn)證請求模塊包括計時器、隨機(jī)數(shù)生成單元、認(rèn)證請求生成單元以及令牌請求接口單元,其中,計時器,用于計時,在預(yù)先設(shè)置的時間周期到時,向隨機(jī)數(shù)生成單元輸出觸發(fā)信息,并重新進(jìn)行計時;隨機(jī)數(shù)生成單元,用于接收觸發(fā)信息,生成隨機(jī)數(shù),輸出至認(rèn)證請求發(fā)送單元;認(rèn)證請求生成單元,用于將隨機(jī)數(shù)攜帶在用于請求當(dāng)前認(rèn)證令牌的認(rèn)證請求中,輸出至令牌請求接口單元;令牌請求接口單元,用于將接收的認(rèn)證請求進(jìn)行發(fā)送。 由上述技術(shù)方案可見,本發(fā)明實施例提供的一種基于服務(wù)器獲取認(rèn)證令牌的方法及系統(tǒng),建立相互信任關(guān)系的第一服務(wù)器與第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,第二服務(wù)器生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;第一服務(wù)器接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。這樣,通過動態(tài)更新認(rèn)證令牌,使得認(rèn)證令牌具有有效期,實現(xiàn)自動配置共同密鑰,避免公司人員變動時,無法獲取下一時間周期內(nèi)的動態(tài)更新的共同密鑰,從而降低公司數(shù)據(jù)信息泄密的危險性,提高認(rèn)證的安全性。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹。顯而易見地,以下描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員而言,還可以根據(jù)這些附圖所示實施例得到其它的實施例及其附圖。圖1為現(xiàn)有基于服務(wù)器的認(rèn)證方法流程示意圖。圖2為本發(fā)明實施例基于服務(wù)器獲取認(rèn)證令牌的方法流程示意圖。圖3為本發(fā)明實施例基于服務(wù)器獲取認(rèn)證令牌的方法具體流程示意圖。圖4為本發(fā)明的實施例基于服務(wù)器獲取認(rèn)證令牌的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式以下將結(jié)合附圖對本發(fā)明各實施例的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實施例僅僅是本發(fā)明的一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所得到的所有其它實施例,都屬于本發(fā)明所保護(hù)的范圍?,F(xiàn)有基于服務(wù)器獲取認(rèn)證令牌的方法,需要服務(wù)器認(rèn)證雙方共同維護(hù)約定的共同密鑰,而在公司人員有變動的情況下,需要與認(rèn)證對方協(xié)商、更換預(yù)先協(xié)商的secretKey,從而造成認(rèn)證雙方頻繁的程序或配置更改,共同密鑰維護(hù)較為繁瑣,而如果不及時更換,又會導(dǎo)致認(rèn)證的安全性較低。本發(fā)明實施例中,提出一種基于動態(tài)令牌(token)的認(rèn)證方式,提供服務(wù)器間輕量級的認(rèn)證協(xié)議,以降低認(rèn)證安全性對預(yù)先協(xié)商的secretKey的依賴性。這樣,在公司人員變動時,不會對服務(wù)器間的認(rèn)證安全性產(chǎn)生威脅,從而實現(xiàn)一種較高安全性的認(rèn)證方式。圖2為本發(fā)明實施例基于服務(wù)器獲取認(rèn)證令牌的方法流程示意圖。參見圖2,該流程包括步驟201,建立相互信任關(guān)系的第一服務(wù)器與第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;本步驟中,第二服務(wù)器(Secondary Server)為第一服務(wù)器(Primary Server)信任的服務(wù)器,Primary Server與Secondary Server建立相互信任關(guān)系的流程,具體可參見相關(guān)技術(shù)文獻(xiàn),在此不再贅述。實際應(yīng)用中,也可以是Primary Server分配一個初始共同密鑰(InitKey)給Secondary Server, Secondary Server 接收 InitKey 并存儲。實際應(yīng)用中,可以采用建立認(rèn)證令牌與服務(wù)器標(biāo)識的映射關(guān)系的方式,存儲認(rèn)證令牌。步驟202,在預(yù)先設(shè)置的時間周期到時,第二服務(wù)器生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;本步驟中,Secondary Server中設(shè)置計時器,在預(yù)先設(shè)置的時間周期到時,生成隨機(jī)數(shù)(randomKey),調(diào)用令牌請求接口(GetToken接口),申請當(dāng)前時間周期內(nèi)的認(rèn)證令牌(Token),并將生成的隨機(jī)數(shù)攜帶在認(rèn)證請求中,即在調(diào)用GetToken接口時,將randomKey作為參數(shù)傳給Primary Server。也就是說,預(yù)先設(shè)置的初始共同密鑰具有有效期,在有效期內(nèi),可以作為共同密鑰進(jìn)行認(rèn)證,在有效期過后,則自動失效,需要采用新的共同密鑰來代替,即在設(shè)置的時間周期到時,需要申請新的當(dāng)前認(rèn)證令牌,代替在前使用的認(rèn)證令牌(如果為初次使用,則為初始共同密鑰),從而通過動態(tài)的共同密鑰的更新,避免公司人員變動時,即使能夠獲知共同密鑰,但由于共同密鑰的使用有效期有限,因而,無法獲取動態(tài)更新的共同密鑰,從而提高認(rèn)證的安全性。預(yù)先設(shè)置的時間周期可以根據(jù)實際需要進(jìn)行設(shè)置,例如,時間周期可以設(shè)置為12小時、一天、二天或一周等。舉例來說,如果時間周期設(shè)置為一天,并以0:00進(jìn)行計時,則在計時到24:00時,觸發(fā)調(diào)用GetToken接口,請求當(dāng)天的Token,向第一服務(wù)器發(fā)送認(rèn)證請求。RandomKey用于防止重放攻擊。本發(fā)明實施例中,Secondary Server還可以進(jìn)一步在認(rèn)證請求中,攜帶GetToken接口地址信息。步驟203,第一服務(wù)器接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;本步驟中,第一服務(wù)器接收認(rèn)證請求, 為第二服務(wù)器分配當(dāng)前認(rèn)證令牌。第一服務(wù)器根據(jù)認(rèn)證請求中攜帶的randomKey以及前一時間周期內(nèi)的認(rèn)證令牌(PreToken),加密生成的 Token。
本發(fā)明實施例中,通過如下加密算法生成加密的令牌字符串(tokenStr)tokenStr=encrypt (Token, randomKey+PreToken)該加密算法中,通過randomKey 以及 PreToken,即 randomKey + PreToken,加密Token,實際應(yīng)用中,加密算法可以是對稱分組密碼算法(blowf ish)。其中,加密算法模式為Blowfish/ECB/NoPaddingo步驟204,通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;本步驟中,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌可以是,第一服務(wù)器在對當(dāng)前認(rèn)證令牌進(jìn)行加密的同時或之后,存儲為第二服務(wù)器生成的當(dāng)前認(rèn)證令牌,即用分配的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。當(dāng)然,實際應(yīng)用中,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌也可以是將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲,這樣,較佳地,在分配當(dāng)前認(rèn)證令牌之后,對當(dāng)前認(rèn)證令牌進(jìn)行加密之前,該方法進(jìn)一步包括查詢是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。即當(dāng)?shù)谝淮问褂脮r,即沒有存儲前一時間周期內(nèi)的令牌,將initKey 作為 preToken。 實際應(yīng)用中,Primary Server可以根據(jù)接收的認(rèn)證請求中攜帶的GetToken接口地址信息輸出加密的令牌字符串。步驟205,第二服務(wù)器解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。本步驟中,SecondaryServer 解密 tokenStr,從而獲取到 token。解密算法如下Token=decrypt (tokenStr, randomKey+PreToken)該解密算法為第一服務(wù)器進(jìn)行加密的加密算法對應(yīng)的解密算法,通過存儲的randomKey 以及 PreToken,即 randomKey + PreToken,解密 tokenStr,得到 Token。本步驟中,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌可以是,第二服務(wù)器獲取當(dāng)前認(rèn)證令牌之后,用獲取的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。當(dāng)然,實際應(yīng)用中,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌也可以是將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲,這樣,較佳地,在第二服務(wù)器解密接收的加密的令牌字符串之后,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌之前,該方法進(jìn)一步包括查詢第二服務(wù)器是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。較佳地,該方法還進(jìn)一步包括步驟206,第二服務(wù)器接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;本步驟中,Primary Server為接收HTTP請求的服務(wù)器,Secondary Server為生成并發(fā)起HTTP請求的服務(wù)器。
Secondary Server接收到通過Oauth的認(rèn)證方式認(rèn)證的用戶請求后,在超文本傳輸協(xié)議(HTTP,Hypertext Transfer Protocol)請求的請求頭(Header)中加入通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識(uid)生成的認(rèn)證屬性字符串” authorization” :authorizationValue。其中,認(rèn)證屬性字符串(authorizationValue)根據(jù)簽名摘要(signStr)以及認(rèn)證字符串(authStr)生成,其中,通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要,生成算法為signStrI = MD5_hash (uidl+Tokenl)算法中,Uidl為認(rèn)證的用戶標(biāo)識(ID),采用消息摘要算法第五版(MD5,Message DigestAlgorithm)哈希算法(MD5_hash),對用戶標(biāo)識以及當(dāng)前認(rèn)證令牌進(jìn)行運算,得到第一簽名摘要(signStrl),即用uid和Token的組合串進(jìn)行MD5生成的簽名摘要。通過第一簽名摘要以及用戶標(biāo)識,生成第一認(rèn)證字符串,第一認(rèn)證字符串格式為authStrl=uidl+” ”+signStrl。通過對第一認(rèn)證字符串進(jìn)行編碼,攜帶當(dāng)前認(rèn)證令牌標(biāo)識,生成認(rèn)證屬性字符串,認(rèn)證屬性字符串格式為String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8"))," utf-8")。
`
本發(fā)明實施例中,Token表示采用Token認(rèn)證方式,采用8比特的Unicode的可變長度字符編碼(UTF-8,8_bit Unicode Transformation Format)對 authStr 進(jìn)行編碼,即authorizationValue 米用 base64 編碼串。具體來說,Secondary Server向Primary Server進(jìn)行接口調(diào)用時,除了附帶相關(guān)接口調(diào)用所需的業(yè)務(wù)參數(shù)外,在HTTP的header信息頭中加入authorization屬性,作為認(rèn)證信息。步驟207,第一服務(wù)器接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。本步驟中,由于只有Secondary Server和Primary Server獲知雙方當(dāng)前用于通信的當(dāng)前認(rèn)證令牌Token,所以在Secondary Server生成signStr后,只有Primary Server可以進(jìn)行相關(guān)有效性校驗,從而實現(xiàn)安全認(rèn)證通信的目的。具體來說,Primary Server接收HTTP請求,獲取HTTP請求中攜帶的認(rèn)證屬性字符串,即 String authorizationValue=//Token//+new String (Base64. encodeBase64(authStr. getByte (〃utf_8〃)), 〃utf_8〃),根據(jù)認(rèn)證屬性字符串中的Token標(biāo)識,確定采用Token認(rèn)證方式,對認(rèn)證屬性字符串中的new String (Base64. encodeBase64 (authStr.getByte (〃utf_8〃)),〃utf_8〃)進(jìn)行解碼,獲取authStrl,根據(jù)authStrl的格式,分別獲取用戶標(biāo)識I以及signStrl,根據(jù)獲取的用戶標(biāo)識I (uidl)以及預(yù)先存儲的當(dāng)前認(rèn)證令牌(Token2),生成第二簽名摘要,生成算法為signStr2 = MD5_hash (uidl+Token2)比較第一簽名摘要和第二簽名摘要是否相同,如果相同,表明認(rèn)證通過,進(jìn)行數(shù)據(jù)交互;如果不相同,表明認(rèn)證失敗,向第二服務(wù)器返回認(rèn)證失敗信息。圖3為本發(fā)明實施例基于服務(wù)器獲取認(rèn)證令牌的方法具體流程示意圖。以Secondary Server每天進(jìn)行一次token獲取,即預(yù)先設(shè)置的時間周期為一天為例,參見圖3,該流程包括步驟301,在當(dāng)天零點,Secondary Server 攜帶參數(shù) randomKey,調(diào)用 GetToken 接P ,向 Primary Server 請求 Token ;本步驟中,Secondary Server在預(yù)先設(shè)置的時間周期到時,生成一隨機(jī)數(shù)randomKey,以向 Primary Server 請求 Token。步驟302, Primary Server 生成 token,并用 randomKey 和 PreToken/InitKey 加密 token,生成 tokenStr,返回至 Secondary Server ;本步驟中,tokenStr=encrypt(Token, randomKey+PreToken)。步驟303, Primary Server得到當(dāng)天的token后,進(jìn)行存儲;步驟304, Secondary Server解密獲取token并存儲后,生成認(rèn)證字符串a(chǎn)uthorizationValue,置于HTTP請求頭中,進(jìn)行接口調(diào)用;步驟305, Primary Server 驗證 authorizationValue,成功后進(jìn)行接口功能操作并返回相關(guān)結(jié)果;步驟3 06, Secondary Server 在全天內(nèi),可攜帶 authorizationValue,進(jìn)行相關(guān)接口調(diào)用;步驟307, Primary Server通過驗證authorizationValue,確認(rèn)合法性,進(jìn)行相應(yīng)功能操作并返回結(jié)果;步驟308,計時到下一天零點,返回執(zhí)行步驟301。由上述可見,本發(fā)明實施例的基于服務(wù)器獲取認(rèn)證令牌的方法,通過動態(tài)更新認(rèn)證令牌,使得認(rèn)證令牌具有有效期,在有效期內(nèi),可以作為共同密鑰進(jìn)行認(rèn)證,在有效期過后,則自動失效,需要申請新的當(dāng)前認(rèn)證令牌,從而通過動態(tài)的認(rèn)證令牌的更新,實現(xiàn)自動配置共同密鑰,避免公司人員變動時,即使能夠獲知共同密鑰,但由于共同密鑰的使用有效期有限,因而,無法獲取下一時間周期內(nèi)的動態(tài)更新的共同密鑰,從而降低公司數(shù)據(jù)信息泄密的危險性,提高認(rèn)證的安全性。同時,讓服務(wù)器間的請求認(rèn)證安全性不依賴某一具體信息,通過動態(tài)的token,既保證認(rèn)證的輕量級,同時保證認(rèn)證的安全性。圖4為本發(fā)明的實施例基于服務(wù)器獲取認(rèn)證令牌的系統(tǒng)結(jié)構(gòu)示意圖。參見圖4,該系統(tǒng)包括第一服務(wù)器以及第二服務(wù)器,其中,第一服務(wù)器,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,調(diào)用預(yù)先設(shè)置的令牌請求接口,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。較佳地,第二服務(wù)器進(jìn)一步用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;相應(yīng)地,第一服務(wù)器進(jìn)一步用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。其中,第一服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求處理模塊以及驗證模塊(圖中未示出),其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存·儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;本發(fā)明實施例中,存儲模塊采用建立認(rèn)證令牌與服務(wù)器標(biāo)識的映射關(guān)系的方式,存儲認(rèn)證令牌。認(rèn)證請求處理模塊,用于接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌;本發(fā)明實施例中,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌可以是,第一服務(wù)器在對當(dāng)前認(rèn)證令牌進(jìn)行加密的同時或之后,存儲為第二服務(wù)器生成的當(dāng)前認(rèn)證令牌,即用分配的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。當(dāng)然,實際應(yīng)用中,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌也可以是將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲。這樣,在分配當(dāng)前認(rèn)證令牌之后,對當(dāng)前認(rèn)證令牌進(jìn)行加密之前,認(rèn)證請求處理模塊查詢是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。驗證模塊,用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。本發(fā)明實施例中,驗證模塊包括認(rèn)證屬性字符串獲取單元、解碼單元、第一簽名摘要獲取單元、第二簽名摘要獲取單元以及比較單元,其中,認(rèn)證屬性字符串獲取單元,用于接收HTTP請求,獲取HTTP請求中攜帶的認(rèn)證屬性字符串;解碼單元,用于根據(jù)認(rèn)證屬性字符串中的令牌標(biāo)識,確定采用令牌認(rèn)證方式,對認(rèn)證屬性字符串進(jìn)行解碼,獲取第一認(rèn)證字符串,輸出至第一簽名摘要獲取單元;第一簽名摘要獲取單元,用于根據(jù)認(rèn)證字符串的格式,從接收的第一認(rèn)證字符串中,分別獲取用戶標(biāo)識以及第一簽名摘要;第二簽名摘要獲取單元,用于根據(jù)第一簽名摘要獲取單元獲取的用戶標(biāo)識以及存儲模塊存儲的當(dāng)前認(rèn)證令牌,生成第二簽名摘要;比較單元,用于比較第一簽名摘要和第二簽名摘要是否相同,如果相同,表明認(rèn)證通過,進(jìn)行數(shù)據(jù)交互;如果不相同,表明認(rèn)證失敗,向第二服務(wù)器返回認(rèn)證失敗信息。第二服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求模塊、認(rèn)證令牌更新模塊以及驗證請求模塊(圖中未示出),其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;認(rèn)證請求模塊,用于在預(yù)先設(shè)置的時間周期到時,調(diào)用預(yù)先設(shè)置的令牌請求接口,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;本發(fā)明實施例中,認(rèn)證請求模塊包括計時器、隨機(jī)數(shù)生成單元、認(rèn)證請求生成單元以及令牌請求接口單元,其中,計時器,用于計時,在預(yù)先設(shè)置的時間周期到時,向隨機(jī)數(shù)生成單元輸出觸發(fā)信息,并重新進(jìn)行計時;隨機(jī)數(shù)生成單元,用于接收觸發(fā)信息,生成隨機(jī)數(shù),輸出至認(rèn)證請求發(fā)送單元;認(rèn)證請求生成單元,用于將隨機(jī)數(shù)攜帶在用于請求當(dāng)前認(rèn)證令牌的認(rèn)證請求中,輸出至令牌請求接口單元;令牌請求接口單元,用于將接收的認(rèn)證請求進(jìn)行發(fā)送。
認(rèn)證令牌更新模塊,用于解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌; 本發(fā)明實施例中,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌可以是,第二服務(wù)器獲取當(dāng)前認(rèn)證令牌之后,用獲取的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。當(dāng)然,實際應(yīng)用中,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌也可以是將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲。這樣,在第二服務(wù)器解密接收的加密的令牌字符串之后,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌之前,認(rèn)證令牌更新模塊查詢第二服務(wù)器是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。驗證請求模塊,用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串。本發(fā)明實施例中,認(rèn)證屬性字符串(authorizationValue)根據(jù)簽名摘要(signStr)以及認(rèn)證字符串(authStr)生成,其中,通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要,生成算法為signStrl = MD5_hash (uidl+Tokenl)算法中,Uidl為認(rèn)證的用戶標(biāo)識(ID),用uid和Token的組合串進(jìn)行MD5生成第一簽名摘要。通過第一簽名摘要以及用戶標(biāo)識,生成第一認(rèn)證字符串,第一認(rèn)證字符串格式為authStrl=uidl+” ”+signStrl。通過對第一認(rèn)證字符串進(jìn)行編碼,攜帶當(dāng)前認(rèn)證令牌標(biāo)識,生成認(rèn)證屬性字符串,認(rèn)證屬性字符串格式為String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8"))," utf-8")。顯然,本領(lǐng)域技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也包含 這些改動和變型在內(nèi)。
權(quán)利要求
1.一種基于服務(wù)器獲取認(rèn)證令牌的方法,包括建立相互信任關(guān)系的第一服務(wù)器與第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,第二服務(wù)器生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;第一服務(wù)器接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述方法進(jìn)一步包括第二服務(wù)器接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;第一服務(wù)器接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。
3.根據(jù)權(quán)利要求1或2所述的方法,其中,采用建立認(rèn)證令牌與服務(wù)器標(biāo)識的映射關(guān)系的方式,存儲所述認(rèn)證令牌。
4.根據(jù)權(quán)利要求3所述的方法,其中,所述根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌包括第一服務(wù)器在對當(dāng)前認(rèn)證令牌進(jìn)行加密的同時或之后,用分配的當(dāng)前認(rèn)證令牌替換存儲的認(rèn)證令牌。
5.根據(jù)權(quán)利要求3所述的方法,其中,所述根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌包括將初始共同密鑰與分配的當(dāng)前認(rèn)證令牌分別進(jìn)行存儲。
6.根據(jù)權(quán)利要求5所述的方法,其中,在所述分配當(dāng)前認(rèn)證令牌之后,對當(dāng)前認(rèn)證令牌進(jìn)行加密之前,該方法進(jìn)一步包括查詢是否存儲有前一時間周期內(nèi)的認(rèn)證令牌,如果沒有,以存儲的初始共同密鑰為前一時間周期內(nèi)的認(rèn)證令牌。
7.根據(jù)權(quán)利要求3所述的方法,其中,通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成所述認(rèn)證屬性字符串包括通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要;通過第一簽名摘要以及用戶標(biāo)識,生成第一認(rèn)證字符串;通過對第一認(rèn)證字符串進(jìn)行編碼,攜帶當(dāng)前認(rèn)證令牌標(biāo)識,生成認(rèn)證屬性字符串。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述通過當(dāng)前認(rèn)證令牌以及用戶標(biāo)識,生成第一簽名摘要包括采用消息摘要算法第五版哈希算法,對用戶標(biāo)識以及當(dāng)前認(rèn)證令牌進(jìn)行運算,得到第一簽名摘要。
9.根據(jù)權(quán)利要求8所述的方法,其中,所述認(rèn)證屬性字符串格式為String authorizationValue=//Token//+new String(Base64. encodeBase64(authStr. getByte ("utf_8")),"utf_8");其中,Token表示采用Token認(rèn)證方式;new String (Base64. encodeBase64 (authStr. getByte (〃utf_8〃)),〃utf_8〃)表不采用8比特的Unicode的可變長度字符編碼對authStr進(jìn)行編碼。
10.根據(jù)權(quán)利要求9所述的方法,其中,所述進(jìn)行認(rèn)證屬性字符串驗證包括第一服務(wù)器獲取HTTP請求中攜帶的認(rèn)證屬性字符串,根據(jù)認(rèn)證屬性字符串中的Token,確定米用Token認(rèn)證方式,對認(rèn)證屬性字符串中的newString (Base64. encodeBase64 (authStr. getByte (〃utf_8〃)), 〃utf_8〃)進(jìn)行解碼,獲取 authStr,根據(jù) authStr的格式,分別獲取用戶標(biāo)識以及signStr,根據(jù)獲取的用戶標(biāo)識以及預(yù)先存儲的當(dāng)前認(rèn)證令牌,生成第二簽名摘要;比較第一簽名摘要和第二簽名摘要是否相同,如果相同,表明認(rèn)證通過;如果不相同, 表明認(rèn)證失敗。
11.一種基于服務(wù)器獲取認(rèn)證令牌的系統(tǒng),其特征在于,該系統(tǒng)包括第一服務(wù)器以及第二服務(wù)器,其中,第一服務(wù)器,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述第二服務(wù)器進(jìn)一步用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串;相應(yīng)地,第一服務(wù)器進(jìn)一步用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述第一服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求處理模塊以及驗證模塊,其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第二服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;認(rèn)證請求處理模塊,用于接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及預(yù)先設(shè)置的加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密,生成加密的令牌字符串;通過令牌請求接口,將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)分配的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌;驗證模塊,用于接收HTTP請求,進(jìn)行認(rèn)證屬性字符串驗證,并在通過驗證后進(jìn)行數(shù)據(jù)交互。
14.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述驗證模塊包括認(rèn)證屬性字符串獲取單元、解碼單元、第一簽名摘要獲取單元、第二簽名摘要獲取單元以及比較單元,其中,認(rèn)證屬性字符串獲取單元,用于接收HTTP請求,獲取HTTP請求中攜帶的認(rèn)證屬性字符串;解碼單元,用于根據(jù)認(rèn)證屬性字符串中的令牌標(biāo)識,確定采用令牌認(rèn)證方式,對認(rèn)證屬性字符串進(jìn)行解碼,獲取第一認(rèn)證字符串,輸出至第一簽名摘要獲取單元;第一簽名摘要獲取單元,用于根據(jù)認(rèn)證字符串的格式,從接收的第一認(rèn)證字符串中,分別獲取用戶標(biāo)識以及第一簽名摘要;第二簽名摘要獲取單元,用于根據(jù)第一簽名摘要獲取單元獲取的用戶標(biāo)識以及存儲模塊存儲的當(dāng)前認(rèn)證令牌,生成第二簽名摘要;比較單元,用于比較第一簽名摘要和第二簽名摘要是否相同,如果相同,表明認(rèn)證通過,進(jìn)行數(shù)據(jù)交互;如果不相同,表明認(rèn)證失敗,向第二服務(wù)器返回認(rèn)證失敗信息。
15.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述第二服務(wù)器包括協(xié)商模塊、存儲模塊、認(rèn)證請求模塊、認(rèn)證令牌更新模塊以及驗證請求模塊,其中,協(xié)商模塊,用于與建立相互信任關(guān)系的第一服務(wù)器協(xié)商,生成初始共同密鑰作為認(rèn)證令牌,輸出至存儲模塊;存儲模塊,用于存儲作為認(rèn)證令牌的初始共同密鑰;認(rèn)證請求模塊,用于在預(yù)先設(shè)置的時間周期到時,生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;認(rèn)證令牌更新模塊,用于解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,根據(jù)獲取的當(dāng)前認(rèn)證令牌更新存儲模塊存儲的認(rèn)證令牌;驗證請求模塊,用于接收用戶請求,生成HTTP請求,并在HTTP請求的請求頭中攜帶通過當(dāng)前認(rèn)證令牌和用戶標(biāo)識生成的認(rèn)證屬性字符串。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,所述認(rèn)證請求模塊包括計時器、隨機(jī)數(shù)生成單元、認(rèn)證請求生成單元以及令牌請求接口單元,其中,計時器,用于計時,在預(yù)先設(shè)置的時間周期到時,向隨機(jī)數(shù)生成單元輸出觸發(fā)信息,并重新進(jìn)行計時;隨機(jī)數(shù)生成單元,用于接收觸發(fā)信息,生成隨機(jī)數(shù),輸出至認(rèn)證請求發(fā)送單元;認(rèn)證請求生成單元,用于將隨機(jī)數(shù)攜帶在用于請求當(dāng)前認(rèn)證令牌的認(rèn)證請求中,輸出至令牌請求接口單元;令牌請求接口單元,用于將接收的認(rèn)證請求進(jìn)行發(fā)送。
全文摘要
本發(fā)明公開了一種基于服務(wù)器獲取認(rèn)證令牌的方法及系統(tǒng)。該方法包括第一服務(wù)器與第二服務(wù)器協(xié)商生成初始共同密鑰作為認(rèn)證令牌并存儲;在預(yù)先設(shè)置的時間周期到時,第二服務(wù)器生成隨機(jī)數(shù),并將隨機(jī)數(shù)作為參數(shù)進(jìn)行令牌請求接口的調(diào)用;第一服務(wù)器接收認(rèn)證請求,分配當(dāng)前認(rèn)證令牌,根據(jù)接收的隨機(jī)數(shù)、預(yù)先存儲的認(rèn)證令牌以及加密算法,對當(dāng)前認(rèn)證令牌進(jìn)行加密;將加密的令牌字符串輸出至第二服務(wù)器,根據(jù)當(dāng)前認(rèn)證令牌更新存儲的認(rèn)證令牌;第二服務(wù)器解密接收的加密的令牌字符串,根據(jù)存儲的隨機(jī)數(shù)、認(rèn)證令牌以及預(yù)先設(shè)置的解密算法,獲取當(dāng)前認(rèn)證令牌,并更新存儲的認(rèn)證令牌。應(yīng)用本發(fā)明,可以實現(xiàn)自動配置共同密鑰,提高認(rèn)證的安全性。
文檔編號H04L9/32GK103051628SQ201210564169
公開日2013年4月17日 申請日期2012年12月21日 優(yōu)先權(quán)日2012年12月21日
發(fā)明者李慶豐 申請人:微夢創(chuàng)科網(wǎng)絡(luò)科技(中國)有限公司