本申請(qǐng)涉及安全調(diào)用API的技術(shù),尤其涉及API調(diào)用的安全認(rèn)證方法、裝置、系統(tǒng)。
背景技術(shù):
目前互聯(lián)網(wǎng)軟件產(chǎn)品從產(chǎn)品受眾主要?jiǎng)澐譃閮纱箢?,包括面向終端消費(fèi)者的大眾類互聯(lián)網(wǎng)產(chǎn)品,例如新浪微博Web端、知乎Web端等。這類產(chǎn)品的特點(diǎn)在于使用該類產(chǎn)品的對(duì)象是人類,大部分提供的媒體內(nèi)容為無結(jié)構(gòu)化的文本(例如小說、博客)、圖片、音視頻等。另一類產(chǎn)品面向的受眾是計(jì)算機(jī),即服務(wù)主要形式為提供編程接口的API(Application Programming Interface,應(yīng)用程序接口),方便程序員利用該API進(jìn)行二次開發(fā)。這類產(chǎn)品的特點(diǎn)在于服務(wù)的對(duì)象為計(jì)算機(jī),提供的媒體內(nèi)容大部分為結(jié)構(gòu)化的文本,例如XML、JSON等。
針對(duì)API型產(chǎn)品,目前對(duì)于安全認(rèn)證常見的做法是采用通過用戶賬戶和密碼等鑒權(quán)信息每次提交每次認(rèn)證的方式。針對(duì)終端消費(fèi)者型的產(chǎn)品,通常是用戶使用客戶端瀏覽器進(jìn)入服務(wù)器主頁后,服務(wù)器在首次對(duì)用戶認(rèn)證通過后,為該用戶創(chuàng)建一個(gè)Session,并向用戶頒發(fā)Session ID,客戶端瀏覽器通過cookie或者URL記錄該Session ID,在下次提交請(qǐng)求內(nèi)容會(huì)攜帶該Session ID信息,服務(wù)器收到Session ID,如果Session ID在服務(wù)器的Session ID存儲(chǔ)列表里便認(rèn)為該用戶為合法用戶。
由于目前對(duì)于API型產(chǎn)品的認(rèn)證方式,每次認(rèn)證均需要調(diào)用用戶中心來進(jìn)行認(rèn)證,因此當(dāng)網(wǎng)絡(luò)調(diào)用抖動(dòng)等意外因素發(fā)生時(shí)極有可能導(dǎo)致服務(wù)端調(diào)用 用戶中心出現(xiàn)間歇性不穩(wěn)定情況,最終影響到用戶調(diào)用不穩(wěn)定。而對(duì)于終端消費(fèi)者型的產(chǎn)品,由于依賴于cookie來存儲(chǔ)Session ID,因此存在偽造攻擊的安全漏洞,并且當(dāng)惡意用戶通過嗅探網(wǎng)絡(luò)協(xié)議包并破解了HTTP有關(guān)cookie或者Session ID的值后,便可偽裝為合法用戶向服務(wù)器端進(jìn)行交互。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁〢PI調(diào)用的安全認(rèn)證方法、裝置、系統(tǒng),在保證安全性前提下,提升對(duì)客戶端的身份驗(yàn)證效率,并減少用戶中心的負(fù)擔(dān)。
根據(jù)本申請(qǐng)實(shí)施例的第一方面,提供一種API調(diào)用的安全認(rèn)證方法,運(yùn)行于服務(wù)器端,該方法包括步驟:
當(dāng)收到客戶端的API請(qǐng)求后,如果所述API請(qǐng)求中攜帶有令牌,則校驗(yàn)所述API請(qǐng)求中的令牌是否有效;如果所述API請(qǐng)求中未攜帶令牌或所述API請(qǐng)求中的令牌為無效令牌,則將所述API請(qǐng)求中的鑒權(quán)信息提交給用戶中心進(jìn)行身份驗(yàn)證;在所述用戶中心身份驗(yàn)證通過后,將計(jì)算獲得的令牌發(fā)送給所述客戶端;所述API請(qǐng)求中的令牌和所述計(jì)算獲得的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù)。
本申請(qǐng)通過向客戶端發(fā)放令牌,用令牌來對(duì)客戶端的身份進(jìn)行驗(yàn)證。在計(jì)算令牌時(shí),根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得加密的隨機(jī)數(shù)作為令牌,這樣算出來的隨機(jī)數(shù)是具有唯一值的隨機(jī)數(shù),服務(wù)器在每次收到客戶端的API請(qǐng)求后,均再次校驗(yàn)令牌是否有效,以保證令牌的安全性。由于不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,因此在保證安全性同時(shí)也減小服務(wù)器對(duì)用戶中心的請(qǐng)求次數(shù),減少了用戶中心的負(fù)擔(dān),同時(shí)減小了時(shí)延、加速了登錄驗(yàn)證,也避免了由于整體環(huán)境的波動(dòng)等不確定因素引起的瞬間服務(wù)端請(qǐng)求用戶中心調(diào)用失敗,從而提升了系統(tǒng)性能和穩(wěn)定性。
根據(jù)本申請(qǐng)實(shí)施例的第二方面,提供一種API調(diào)用的安全認(rèn)證方法,運(yùn)行于客戶端,該方法包括步驟:
當(dāng)接收到服務(wù)器的令牌時(shí),將所述令牌存儲(chǔ);所述令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
當(dāng)構(gòu)造API請(qǐng)求時(shí),將所述令牌及鑒權(quán)信息攜帶在所述API請(qǐng)求;
將所述API請(qǐng)求發(fā)送給服務(wù)器。
本申請(qǐng)的客戶端在收到服務(wù)器的令牌后,將令牌存儲(chǔ),并在API請(qǐng)求中攜帶令牌返回給服務(wù)器,從而使服務(wù)器可以對(duì)API中所攜帶的令牌的有效性進(jìn)行驗(yàn)證,以便不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,實(shí)現(xiàn)在保證安全性同時(shí)也減小服務(wù)器對(duì)用戶中心的請(qǐng)求次數(shù),減少了用戶中心的負(fù)擔(dān)。
根據(jù)本申請(qǐng)實(shí)施例的第三方面,提供一種API調(diào)用的安全認(rèn)證裝置,位于服務(wù)器端,包括:
第一通信模塊,用于接收客戶端的API請(qǐng)求;
處理模塊,用于在所述API請(qǐng)求中攜帶有令牌時(shí),校驗(yàn)所述API請(qǐng)求中的令牌是否有效;在所述API請(qǐng)求中未攜帶令牌或所述API請(qǐng)求中的令牌為無效令牌時(shí),將所述API請(qǐng)求中的鑒權(quán)信息提交給用戶中心進(jìn)行身份驗(yàn)證;在所述用戶中心身份驗(yàn)證通過后,將計(jì)算獲得的令牌發(fā)送給第二通信模塊;所述API請(qǐng)求中的令牌和所述計(jì)算獲得的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
第二通信模塊,用于向所述客戶端發(fā)送所述計(jì)算獲得的令牌。
本申請(qǐng)通過向客戶端發(fā)放令牌,用令牌來對(duì)客戶端的身份進(jìn)行驗(yàn)證。在計(jì)算令牌時(shí),根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得加密的隨機(jī)數(shù)作為令牌,這樣算出來的隨機(jī)數(shù)是具有唯一值的隨機(jī)數(shù),服務(wù)器在每次收到客戶端的API請(qǐng)求后,均再次校驗(yàn)令牌是否有效,以保證令牌的安全性。由于不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,因此在保證安全性同時(shí)也減小服務(wù)器對(duì)用戶中心的請(qǐng)求次數(shù),減少了用戶中心的負(fù)擔(dān),同時(shí)減小了時(shí)延、加速了登錄驗(yàn)證,也避免了由于整體環(huán)境的波動(dòng)等不確定因素引起的瞬間服務(wù)端請(qǐng)求用戶中心調(diào)用失敗,從而提升了系統(tǒng)性能和穩(wěn)定性。
根據(jù)本申請(qǐng)實(shí)施例的第四方面,提供一種API調(diào)用的安全認(rèn)證裝置,運(yùn)行于客戶端,包括:
存儲(chǔ)模塊,用于當(dāng)接收到服務(wù)器的令牌時(shí),將所述令牌存儲(chǔ);所述令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
消息構(gòu)造模塊,用于當(dāng)構(gòu)造API請(qǐng)求時(shí),將所述令牌及鑒權(quán)信息攜帶在所述API請(qǐng)求;
通信模塊,用于接收服務(wù)器的所述令牌,并發(fā)給所述存儲(chǔ)模塊,以及將所述API請(qǐng)求發(fā)送給服務(wù)器。
本申請(qǐng)的客戶端在收到服務(wù)器的令牌后,將令牌存儲(chǔ),并在API請(qǐng)求中攜帶令牌返回給服務(wù)器,從而使服務(wù)器可以對(duì)API中所攜帶的令牌的有效性進(jìn)行驗(yàn)證,以便不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,實(shí)現(xiàn)在保證安全性同時(shí)也減小服務(wù)器對(duì)用戶中心的請(qǐng)求次數(shù),減少了用戶中心的負(fù)擔(dān)。
根據(jù)本申請(qǐng)實(shí)施例的第五方面,提供一種API調(diào)用的安全認(rèn)證系統(tǒng),包括服務(wù)器、用戶中心,
所述服務(wù)器,用于當(dāng)收到客戶端的API請(qǐng)求后,如果所述API請(qǐng)求中攜帶有令牌,則校驗(yàn)所述API請(qǐng)求中的令牌是否有效;如果所述API請(qǐng)求中未攜帶令牌或所述API請(qǐng)求中的令牌為無效令牌,則將所述API請(qǐng)求中的鑒權(quán)信息提交給用戶中心進(jìn)行身份驗(yàn)證;在所述用戶中心身份驗(yàn)證通過后,將計(jì)算獲得的令牌發(fā)送給所述客戶端;所述API請(qǐng)求中的令牌和所述計(jì)算獲得的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
所述用戶中心,用于根據(jù)所述服務(wù)器發(fā)送的所述鑒權(quán)信息對(duì)所述客戶端進(jìn)行身份驗(yàn)證,以及將身份驗(yàn)證的結(jié)果通知所述服務(wù)器。
本申請(qǐng)通過向客戶端發(fā)放令牌,用令牌來對(duì)客戶端的身份進(jìn)行驗(yàn)證。在計(jì)算令牌時(shí),根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得加密的隨機(jī)數(shù)作為令牌,這樣算出來的隨機(jī)數(shù)是具有唯一值的隨機(jī)數(shù),客戶端在收到服務(wù)器的令牌后,將令牌存儲(chǔ),并在API請(qǐng)求中攜帶令牌返回給服務(wù)器,服務(wù)器在每次 收到客戶端的API請(qǐng)求后,均再次校驗(yàn)令牌是否有效,以保證令牌的安全性。由于不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,因此在保證安全性同時(shí)也減小服務(wù)器對(duì)用戶中心的請(qǐng)求次數(shù),減少了用戶中心的負(fù)擔(dān),同時(shí)減小了時(shí)延、加速了登錄驗(yàn)證,也避免了由于整體環(huán)境的波動(dòng)等不確定因素引起的瞬間服務(wù)端請(qǐng)求用戶中心調(diào)用失敗,從而提升了系統(tǒng)性能和穩(wěn)定性。
附圖說明
圖1為本申請(qǐng)實(shí)施例中一種網(wǎng)絡(luò)環(huán)境圖;
圖2為本申請(qǐng)實(shí)施例中服務(wù)器側(cè)調(diào)用API的安全認(rèn)證方法的流程圖;
圖3為本申請(qǐng)實(shí)施例中客戶端側(cè)調(diào)用API的安全認(rèn)證方法的流程圖;
圖4為本申請(qǐng)一個(gè)應(yīng)用實(shí)例中調(diào)用API的安全認(rèn)證方法的時(shí)序圖;
圖5為本申請(qǐng)實(shí)施例中調(diào)用API的安全認(rèn)證裝置的硬件架構(gòu)圖;
圖6為本申請(qǐng)一個(gè)實(shí)施例中API的安全認(rèn)證裝置的軟件邏輯框圖;
圖7為本申請(qǐng)一個(gè)實(shí)施例中API的安全認(rèn)證裝置的軟件邏輯框圖;
圖8為本申請(qǐng)一個(gè)實(shí)施例中API的安全認(rèn)證系統(tǒng)的軟件邏輯框圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng) 目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
本申請(qǐng)所提供的API調(diào)用的安全認(rèn)證方法適用于客戶端和服務(wù)器交互過程是無狀態(tài)交互的API系統(tǒng),一個(gè)典型的應(yīng)用環(huán)境是REST(Representational State Transfer,表征性狀態(tài)傳輸)風(fēng)格的API系統(tǒng),簡稱REST-API系統(tǒng)。REST通?;谑褂肏TTP等目前廣泛流行的連接協(xié)議,HTTP連接是無狀態(tài)的(也就是不記錄每個(gè)連接的信息),而是在REST傳輸中包含應(yīng)用的所有狀態(tài)信息。
圖1是本申請(qǐng)所適用的一種較常見的網(wǎng)絡(luò)環(huán)境。如圖所示,網(wǎng)絡(luò)100通??梢园軌?qū)⒕W(wǎng)絡(luò)節(jié)點(diǎn)耦合到一起的任意類型的有線或無線通信信道。這包括但不限于,局域網(wǎng)、廣域網(wǎng)、網(wǎng)絡(luò)的組合或支持兩個(gè)或多個(gè)計(jì)算系統(tǒng)之間的通信的其他網(wǎng)絡(luò)。在本申請(qǐng)的一種實(shí)施方式中,網(wǎng)絡(luò)100包括因特網(wǎng)。
網(wǎng)絡(luò)100中所包含的設(shè)備包括請(qǐng)求調(diào)用API的客戶端101、作為API的提供方的服務(wù)器102,用戶中心103,用戶中心103具備根據(jù)鑒權(quán)信息對(duì)客戶端進(jìn)行身份認(rèn)證的能力,并保存有客戶端101所對(duì)應(yīng)的各種標(biāo)識(shí)信息,例如用戶賬號(hào)、密碼、用戶編號(hào)等。
圖2提供了本申請(qǐng)的實(shí)施例的流程圖,其中示出了服務(wù)器102在調(diào)用API的過程中的安全認(rèn)證流程。
S201,接收客戶端的API請(qǐng)求;
S202,如果API請(qǐng)求中攜帶有令牌,則校驗(yàn)API請(qǐng)求中的令牌是否有效;如果API請(qǐng)求中未攜帶令牌或API請(qǐng)求中的令牌為無效令牌,則將API 請(qǐng)求中的鑒權(quán)信息提交給用戶中心進(jìn)行身份驗(yàn)證;在用戶中心身份驗(yàn)證通過后,計(jì)算獲得新的令牌,將計(jì)算獲得的令牌發(fā)送給客戶端;API請(qǐng)求中攜帶的令牌和計(jì)算所獲得的令牌均為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù)。
在本申請(qǐng)中,當(dāng)客戶端101首次登錄服務(wù)器102時(shí),由于此時(shí)服務(wù)器102尚未向客戶端101發(fā)放令牌,因此,需要使用客戶端101的鑒權(quán)信息向用戶中心103進(jìn)行身份驗(yàn)證;用戶中心103驗(yàn)證通過后,服務(wù)器102會(huì)通過計(jì)算生成令牌并發(fā)放給客戶端101,之后,客戶端101與服務(wù)器102交互時(shí)攜帶此令牌,服務(wù)器102每次對(duì)這個(gè)令牌進(jìn)行校驗(yàn),來確認(rèn)客戶端101的來源,如果API請(qǐng)求中的令牌無效,則再次通過客戶端的鑒權(quán)信息向用戶中心103進(jìn)行身份認(rèn)證,認(rèn)證通過后會(huì)重新向客戶端發(fā)放令牌。
本申請(qǐng)通過向客戶端101發(fā)放令牌,用令牌來對(duì)客戶端的身份進(jìn)行驗(yàn)證,如果令牌有效,則認(rèn)為該客戶端的身份合法。在計(jì)算令牌時(shí),根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得加密的隨機(jī)數(shù)作為令牌,這樣算出來的隨機(jī)數(shù)是具有唯一值的隨機(jī)數(shù),服務(wù)器在每次收到客戶端的API請(qǐng)求后,均再次校驗(yàn)令牌是否有效,以保證令牌的安全性。由于不需要頻繁訪問用戶中心來對(duì)客戶端的身份進(jìn)行驗(yàn)證,因此在保證安全性同時(shí)也減小服務(wù)器102對(duì)用戶中心103的請(qǐng)求次數(shù),提升了系統(tǒng)性能和穩(wěn)定性。
在一個(gè)實(shí)施例中,服務(wù)器102校驗(yàn)API請(qǐng)求中的令牌是否有效的途徑可以是根據(jù)令牌的索引信息獲得預(yù)先約定的參數(shù),根據(jù)預(yù)先約定的參數(shù)通過不可逆算法計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與所收到的API請(qǐng)求中的令牌是否相同,如果相同,則判斷該API請(qǐng)求中攜帶的令牌有效,如果API請(qǐng)求中攜帶的令牌有效,則認(rèn)為該客戶端身份驗(yàn)證通過,進(jìn)行后續(xù)的交互過程,例如,將客戶端請(qǐng)求的API接口的相關(guān)數(shù)據(jù)發(fā)送給客戶端;如果不相同,則判斷API請(qǐng)求中攜帶的令牌無效。
服務(wù)器102在將計(jì)算后獲得的令牌發(fā)送給客戶端101時(shí),可以將令牌的索引信息發(fā)給客戶端,以便客戶端攜帶此令牌的索引信息連同計(jì)算獲得的令 牌一起返回給服務(wù)器102,作為一個(gè)實(shí)施例,可以將索引信息與計(jì)算獲得的令牌攜帶在同一條消息中發(fā)送給客戶端,也可以將索引信息和計(jì)算獲得的令牌作為兩條不同的消息發(fā)送給客戶端。索引信息用來找到計(jì)算與該客戶端的令牌相關(guān)的預(yù)先預(yù)定的參數(shù),可以看做是區(qū)分不同令牌的唯一標(biāo)識(shí)。例如,可以是在計(jì)算令牌時(shí),生成一個(gè)唯一性的字符串;或者可以是用戶中心103在對(duì)客戶端101認(rèn)證通過后返回的一個(gè)身份標(biāo)識(shí)(例如,客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)等等)。
為了能夠計(jì)算出具有唯一值,且可重現(xiàn)的隨機(jī)數(shù)作為令牌,需要預(yù)先約定好相關(guān)的參數(shù)以及算法,在發(fā)放令牌時(shí)和校驗(yàn)令牌有效性時(shí)使用相同的參數(shù)及算法來計(jì)算令牌。
作為一個(gè)例子,預(yù)先預(yù)定好的參數(shù)可以包括與客戶端唯一性有關(guān)的參數(shù),例如,可以是至少一種身份標(biāo)識(shí),身份標(biāo)識(shí)可以包括客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)等。
為了能夠更好地防止惡意用戶通過嘗試猜測到預(yù)先約定的參數(shù)的具體值以獲得令牌,預(yù)先約定的參數(shù)還包括加密秘鑰,可以將一個(gè)隨機(jī)數(shù)作為加密秘鑰并保存在服務(wù)器上。
作為一個(gè)例子,可以通過哈希算法作為不可逆算法,例如公式1的例子所描述的情形:
Token=Hash(MAC,UID,KEY) (公式1)
公式1中Token為需要計(jì)算的令牌,在公式1中預(yù)先約定的參數(shù)為客戶端的MAC地址、用戶編碼UID、加密秘鑰KEY。
在一個(gè)例子中,令牌可以附加在HTTP協(xié)議頭中傳輸,為了更好的防止令牌被盜用的風(fēng)險(xiǎn),預(yù)先約定的參數(shù)還可以包括有效期驗(yàn)證參數(shù),在生成令牌時(shí)將有效期驗(yàn)證參數(shù)也作為不可逆算法的輸入?yún)?shù),例如公式2所描述的實(shí)例:
Token=Hash(MAC,UID,SEED,KEY) (公式2)
公式2中Token為需要計(jì)算的令牌,在公式2中預(yù)先約定的參數(shù)為客戶 端的MAC地址、用戶編碼UID、加密秘鑰KEY、有效期驗(yàn)證參數(shù)SEED。SEED是一個(gè)跟Token調(diào)用生命周期相關(guān)的值,如果以時(shí)間作為SEED,那么可以選擇在固定的時(shí)間后該Token失效,如果以調(diào)用次數(shù)作為SEED,那么可以選擇在固定次數(shù)之后該Token失效,容易理解,有效期驗(yàn)證參數(shù)的實(shí)現(xiàn)方式不局限于所列舉的幾種方式。
在計(jì)算獲得令牌后,向客戶端發(fā)送該令牌時(shí),可以將有效期驗(yàn)證參數(shù)一并發(fā)送至客戶端;客戶端返回API請(qǐng)求時(shí)在HTTP的協(xié)議頭中攜帶此有效期驗(yàn)證參數(shù),服務(wù)器端獲取有效期驗(yàn)證參數(shù)后,將驗(yàn)證當(dāng)前的令牌是否過期,例如SEED時(shí)間戳已經(jīng)和當(dāng)前時(shí)間間隔大于失效時(shí)間,或者SEED調(diào)用次數(shù)大于固定次數(shù),那么可以視作令牌已經(jīng)失效。如果校驗(yàn)API請(qǐng)求中的令牌已經(jīng)失效,那么重新向用戶中心認(rèn)證鑒權(quán),并為客戶端再次頒發(fā)新令牌;如果未過期,則根據(jù)預(yù)先約定的參數(shù)計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與API請(qǐng)求中的令牌是否相同,如果相同,則API請(qǐng)求中的令牌有效,如果不相同,則API請(qǐng)求中的令牌無效。
圖3提供了本申請(qǐng)的實(shí)施例的流程圖,其中示出了客戶端101在調(diào)用API的過程中的安全認(rèn)證流程。
S301,當(dāng)接收到服務(wù)器的令牌時(shí),將令牌存儲(chǔ);
在一個(gè)實(shí)施例中,客戶端在首次向服務(wù)器發(fā)送調(diào)用API的請(qǐng)求時(shí),可以將鑒權(quán)信息發(fā)送給服務(wù)器,鑒權(quán)信息是用來向用戶中心進(jìn)行鑒權(quán)所需要的信息,對(duì)于不同的設(shè)計(jì)方案,鑒權(quán)信息的內(nèi)容可以不同,較常見的可以是用戶賬戶、密碼等信息。服務(wù)器根據(jù)客戶端的鑒權(quán)信息向用戶中心請(qǐng)求認(rèn)證該客戶端的身份,如果認(rèn)證不通過,則服務(wù)器將通知客戶端身份認(rèn)證失敗,如果用戶中心對(duì)客戶端認(rèn)證通過,則服務(wù)器將根據(jù)預(yù)先約定的參數(shù)生成令牌返回給客戶端。作為一個(gè)例子,在客戶端收到服務(wù)器返回的令牌后,可以將令牌存儲(chǔ)在當(dāng)前的進(jìn)程空間中。另外,還可以將令牌所對(duì)應(yīng)的索引信息進(jìn)行存儲(chǔ)。令牌的索引信息既可以是一個(gè)具有唯一性的隨機(jī)數(shù),也可以是身份標(biāo)識(shí),例如客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)等 信息。令牌所對(duì)應(yīng)的索引信息可以是通過服務(wù)器發(fā)送過來,也可以是與服務(wù)器預(yù)先約定好的信息,例如,如果將用戶賬號(hào)作為索引信息,則可以在用戶登錄時(shí)將用戶賬號(hào)進(jìn)行保存。
在另一個(gè)實(shí)施例中,如果客戶端發(fā)給服務(wù)器的令牌為無效令牌,則服務(wù)器再次根據(jù)客戶端的鑒權(quán)信息向用戶中心請(qǐng)求認(rèn)證該客戶端的身份,如果認(rèn)證不通過,則服務(wù)器將通知客戶端身份認(rèn)證失敗,如果用戶中心對(duì)客戶端認(rèn)證通過,則服務(wù)器再次將根據(jù)預(yù)先約定的參數(shù)生成新的令牌返回給客戶端,客戶端用新的令牌更新已保存的令牌。
S302,當(dāng)構(gòu)造API請(qǐng)求時(shí),將令牌及鑒權(quán)信息攜帶在API請(qǐng)求中;
從S301可以看出,API請(qǐng)求中依據(jù)不同的實(shí)施例,可能攜帶的信息可以包括令牌、索引信息、用戶賬戶、密碼等。
S303,將API請(qǐng)求發(fā)送給服務(wù)器。
由于令牌是經(jīng)過加密的不可逆隨機(jī)數(shù),因此被截獲后無法獲取到令牌中的具體值,為了保證索引信息、用戶賬號(hào)、密碼等敏感信息不被惡意截獲,可以使用安全通信信道進(jìn)行發(fā)送。例如,可以使用URL來調(diào)用API,并且請(qǐng)求可以通過HTTPS會(huì)話、作為HTTP“GET(得到)”消息來發(fā)送。
在一個(gè)例子中,客戶端與服務(wù)器需要事先約定計(jì)算令牌的參數(shù),對(duì)于服務(wù)器無法獲得的參數(shù),可以通過客戶端收集后在API請(qǐng)求中發(fā)送給服務(wù)器,例如,一些諸如MAC地址的身份標(biāo)識(shí),可以在客戶端收集后,通過API請(qǐng)求發(fā)送給服務(wù)器。
圖4示出了具體的應(yīng)用場景下本申請(qǐng)實(shí)施例的API調(diào)用的安全認(rèn)證方法。
假設(shè)用戶希望使用某“天氣預(yù)報(bào)”的客戶端提供的天氣預(yù)報(bào)服務(wù),用戶為了使用該服務(wù),需要通過“天氣預(yù)報(bào)”客戶端向“天氣預(yù)報(bào)”服務(wù)器身份認(rèn)證,“天氣預(yù)報(bào)”服務(wù)器認(rèn)證用戶身份合法后,才會(huì)開放API接口允許“天氣預(yù)報(bào)”的客戶端讀取天氣預(yù)報(bào)的相關(guān)數(shù)據(jù)自己儲(chǔ)存在“天氣預(yù)報(bào)”服務(wù)器上的照片。因此“天氣預(yù)報(bào)”客戶端需要得到用戶授權(quán)后,“天氣預(yù) 報(bào)”服務(wù)器才會(huì)同意“天氣預(yù)報(bào)”客戶端讀取這些照片。在本應(yīng)用實(shí)例中,客戶端101為“天氣預(yù)報(bào)”客戶端,服務(wù)器102為“天氣預(yù)報(bào)”服務(wù)器。在本應(yīng)用實(shí)例中,計(jì)算令牌所需要的預(yù)先約定的參數(shù)包括客戶端的IP地址、用戶編號(hào)UID、加密秘鑰KEY、有效期驗(yàn)證參數(shù)SEED。
S401,用戶打開“天氣預(yù)報(bào)”客戶端以后,輸入用戶賬戶和密碼,并要求“天氣預(yù)報(bào)”客戶端向“天氣預(yù)報(bào)”服務(wù)器獲取天氣預(yù)報(bào)數(shù)據(jù);
S402,“天氣預(yù)報(bào)”客戶端將用戶的用戶賬號(hào)及密碼攜帶在API請(qǐng)求中,通過HTTPS安全通道發(fā)送給“天氣預(yù)報(bào)”服務(wù)器;此時(shí)令牌和UID為空;
S403,由于令牌值為空,因此“天氣預(yù)報(bào)”服務(wù)器通過令牌驗(yàn)證身份失敗,于是向用戶中心請(qǐng)求認(rèn)證該用戶的身份;
S404,用戶中心認(rèn)證后,返回認(rèn)證結(jié)果。如果用戶中心的認(rèn)證未能通過,將直接報(bào)錯(cuò),并返回錯(cuò)誤信息。如果認(rèn)證通過并將該用戶的用戶編碼一起返回給“天氣預(yù)報(bào)”服務(wù)器;
S405,“天氣預(yù)報(bào)”服務(wù)器根據(jù)API請(qǐng)求中攜帶的IP地址、以及用戶中心返回的UID,按照以下公式計(jì)算出令牌;
Token=Hash(IP,UID,KEY,SEED)
S406,“天氣預(yù)報(bào)”服務(wù)器將Token及UID、SEED一并發(fā)送給“天氣預(yù)報(bào)”客戶端,并向“天氣預(yù)報(bào)”客戶端開放API接口;
S407,“天氣預(yù)報(bào)”客戶端在后續(xù)對(duì)“天氣預(yù)報(bào)”服務(wù)器的訪問過程中,每個(gè)API請(qǐng)求都會(huì)攜帶Token及UID、SEED及鑒權(quán)信息發(fā)送給“天氣預(yù)報(bào)”服務(wù)器;SEED攜帶在HTTP的消息頭中;
S408,“天氣預(yù)報(bào)”服務(wù)器判斷SEED是否已過期,如果過期,則根據(jù)根據(jù)鑒權(quán)信息訪問用戶中心進(jìn)行認(rèn)證;如果沒過期,則執(zhí)行S409;
S409,根據(jù)UID讀出所存儲(chǔ)的KEY、IP地址,連同UID、SEED作為輸入?yún)?shù)再次計(jì)算Token的值,如果與“天氣預(yù)報(bào)”客戶端所發(fā)送的Token值相同,則允許“天氣預(yù)報(bào)”客戶端訪問相關(guān)的天氣預(yù)報(bào)數(shù)據(jù)(S410);如果未 通過,則再次根據(jù)鑒權(quán)信息訪問用戶中心進(jìn)行認(rèn)證,按照S411執(zhí)行認(rèn)證過程(圖中未示出);
S411,用戶中心認(rèn)證后,返回認(rèn)證結(jié)果。如果用戶中心的認(rèn)證未能通過,將直接報(bào)錯(cuò),并返回錯(cuò)誤信息。如果認(rèn)證通過并將該用戶的用戶編碼一起返回給天氣預(yù)報(bào)服務(wù)器;天氣預(yù)報(bào)服務(wù)器再次計(jì)算Token值,并將新獲得的Token值發(fā)送給“天氣預(yù)報(bào)”客戶端。
與前述API調(diào)用的安全認(rèn)證的方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了API調(diào)用的安全認(rèn)證的裝置的實(shí)施例。
本申請(qǐng)API調(diào)用的安全認(rèn)證的裝置的實(shí)施例可以應(yīng)用在服務(wù)器或客戶端上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過其所在服務(wù)器或客戶端的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖5所示,為本申請(qǐng)API調(diào)用的安全認(rèn)證的裝置所在客戶端或服務(wù)器的一種硬件結(jié)構(gòu)圖,除了圖5所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的客戶端或服務(wù)器通常根據(jù)該設(shè)備的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
請(qǐng)參考圖6,API調(diào)用的安全認(rèn)證裝置600的軟件邏輯框圖如圖所示,位于服務(wù)器端,包括:
第一通信模塊601,用于接收客戶端的API請(qǐng)求;
處理模塊602,用于在所述API請(qǐng)求中攜帶有令牌時(shí),校驗(yàn)所述API請(qǐng)求中的令牌是否有效;在所述API請(qǐng)求中未攜帶令牌或所述API請(qǐng)求中的令牌為無效令牌時(shí),將所述API請(qǐng)求中的鑒權(quán)信息提交給用戶中心進(jìn)行身份驗(yàn)證;在所述用戶中心身份驗(yàn)證通過后,計(jì)算獲得令牌,并將計(jì)算獲得的發(fā)送給第二通信模塊603;所述API請(qǐng)求中的令牌和計(jì)算獲得的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
第二通信模塊603,用于向客戶端發(fā)送計(jì)算獲得的令牌。
在一個(gè)實(shí)施例中,所述處理模塊602校驗(yàn)所述令牌是否有效的過程可以 是:
根據(jù)所述令牌的索引信息獲得所述預(yù)先約定的參數(shù),根據(jù)所述預(yù)先約定的參數(shù)通過不可逆算法計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與所述API請(qǐng)求中的令牌是否相同,如果相同,則API請(qǐng)求中的令牌有效,如果不相同,則API請(qǐng)求中的令牌無效。
在一個(gè)實(shí)施例中,所述令牌的索引信息為身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息;所述通信模塊602還用于在所述用戶中心身份驗(yàn)證通過后,接收所述用戶中心返回的身份標(biāo)識(shí);并在將所述令牌發(fā)送給所述客戶端時(shí),將所述身份標(biāo)識(shí)發(fā)給所述客戶端;
所述處理模塊602還用于當(dāng)校驗(yàn)API請(qǐng)求中的令牌是否有效時(shí),從所述API請(qǐng)求中獲取所述身份標(biāo)識(shí),根據(jù)所述身份標(biāo)識(shí)查找與所述身份標(biāo)識(shí)對(duì)應(yīng)的預(yù)先約定的參數(shù)。
在一個(gè)實(shí)施例中,預(yù)先約定的參數(shù)包括至少一種身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息。
另外,預(yù)先約定的參數(shù)還可以包括加密秘鑰,所述加密秘鑰為隨機(jī)數(shù)。
再者,預(yù)先約定的參數(shù)還可以包括有效期驗(yàn)證參數(shù),所述通信模塊602還用于向所述客戶端發(fā)送所述令牌時(shí),將所述有效期驗(yàn)證參數(shù)發(fā)送至客戶端;
所述處理模塊602校驗(yàn)所述令牌是否有效的過程還可以是:
根據(jù)所述有效期驗(yàn)證參數(shù)判斷所述令牌是否過期,如果已過期,則所述API請(qǐng)求中的令牌失效;如果未過期,則根據(jù)所述預(yù)先約定的參數(shù)計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與所述API請(qǐng)求中的令牌是否相同,如果相同,則所述API請(qǐng)求中的令牌有效,如果不相同,則所述API請(qǐng)求中的令牌無效。
圖7是API調(diào)用的安全認(rèn)證裝置700的軟件邏輯框圖如圖所示,該裝置運(yùn)行于客戶端,包括:
存儲(chǔ)模塊701,用于當(dāng)接收到服務(wù)器的令牌時(shí),將所述令牌存儲(chǔ);所述令牌和所述新的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
消息構(gòu)造模塊702,用于當(dāng)構(gòu)造API請(qǐng)求時(shí),將所述令牌及鑒權(quán)信息攜帶在所述API請(qǐng)求;
通信模塊703,用于接收服務(wù)器的所述令牌,并發(fā)給所述存儲(chǔ)模塊,以及將所述API請(qǐng)求發(fā)送給服務(wù)器。
其中所述通信模塊703還用于接收所述服務(wù)器發(fā)送的令牌的索引信息,并發(fā)給所述存儲(chǔ)模塊701存儲(chǔ);
消息構(gòu)造模塊702還用于當(dāng)構(gòu)造所述API請(qǐng)求時(shí),將所述索引信息攜帶在所述API請(qǐng)求中。
在一個(gè)實(shí)施例中,所述令牌的索引信息為身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息。
在一個(gè)實(shí)施例中,預(yù)先約定的參數(shù)包括至少一種身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息;所述消息構(gòu)造模塊702還用于收集所述身份標(biāo)識(shí),并在構(gòu)造API請(qǐng)求時(shí),將所述身份標(biāo)識(shí)攜帶在所述API請(qǐng)求中。
請(qǐng)參見圖8,為本申請(qǐng)API調(diào)用的安全認(rèn)證系統(tǒng)800的邏輯框圖,包括服務(wù)器102、用戶中心103。
服務(wù)器102,用于當(dāng)收到客戶端的API請(qǐng)求后,如果所述API請(qǐng)求中攜帶有令牌,則校驗(yàn)所述API請(qǐng)求中的令牌是否有效;如果所述API請(qǐng)求中未攜帶令牌或所述API請(qǐng)求中的令牌為無效令牌,則將所述API請(qǐng)求中的鑒權(quán)信息提交給用戶中心103進(jìn)行身份驗(yàn)證;在所述用戶中心103身份驗(yàn)證通過后,將計(jì)算獲得的令牌發(fā)送給所述客戶端;API請(qǐng)求中令牌和計(jì)算獲得的令牌為根據(jù)預(yù)先約定的參數(shù)通過不可逆算法獲得的加密的隨機(jī)數(shù);
所述用戶中心103,用于根據(jù)所述服務(wù)器102發(fā)送的所述鑒權(quán)信息對(duì)所 述客戶端進(jìn)行身份驗(yàn)證,以及將身份驗(yàn)證的結(jié)果通知所述服務(wù)器102。
在一個(gè)實(shí)施例中,所述服務(wù)器102校驗(yàn)所述令牌是否有效包括:
根據(jù)所述令牌的索引信息獲得所述預(yù)先約定的參數(shù),根據(jù)所述預(yù)先約定的參數(shù)通過不可逆算法計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與所述API請(qǐng)求中的令牌是否相同,如果相同,則所述API請(qǐng)求中的令牌有效,如果不相同,則所述API請(qǐng)求中的令牌無效。
在一個(gè)實(shí)施例中,所述令牌的索引信息為身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息;
所述用戶中心103還用于在通過所述客戶端的身份驗(yàn)證后,將所述客戶端的身份標(biāo)識(shí)返回給所述服務(wù)器102;
所述服務(wù)器102還用于將所述計(jì)算獲得的令牌發(fā)送給所述客戶端時(shí),將所述身份標(biāo)識(shí)發(fā)給所述客戶端;當(dāng)校驗(yàn)所述API請(qǐng)求中的令牌是否有效時(shí),從所述API請(qǐng)求中獲取所述身份標(biāo)識(shí),根據(jù)所述身份標(biāo)識(shí)查找與所述身份標(biāo)識(shí)對(duì)應(yīng)的預(yù)先約定的參數(shù)。
在一個(gè)實(shí)施例中,預(yù)先約定的參數(shù)包括至少一種身份標(biāo)識(shí),所述身份標(biāo)識(shí)包括所述客戶端的IP地址、MAC地址、客戶端標(biāo)識(shí)、用戶編號(hào)、用戶賬號(hào)中的任意一種信息。
另外,在另一個(gè)實(shí)施例中,預(yù)先約定的參數(shù)還包括加密秘鑰,所述加密秘鑰為隨機(jī)數(shù)。以及有效期驗(yàn)證參數(shù),所述服務(wù)器102還用于:
向所述客戶端發(fā)送所述計(jì)算獲得的令牌時(shí),將所述有效期驗(yàn)證參數(shù)發(fā)送至客戶端;
所述服務(wù)器102校驗(yàn)所述API請(qǐng)求中的令牌是否有效包括:
根據(jù)所述有效期驗(yàn)證參數(shù)判斷所述API請(qǐng)求中的令牌是否過期,如果已過期,則所述令牌失效;如果未過期,則根據(jù)所述預(yù)先約定的參數(shù)計(jì)算當(dāng)前令牌,判斷當(dāng)前令牌與所述API請(qǐng)求中的令牌是否相同,如果相同,則所述令牌有效,如果不相同,則所述API請(qǐng)求中的令牌無效。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。