本發(fā)明涉及無狀態(tài)服務(wù)認證技術(shù)領(lǐng)域,更具體地說,涉及一種基于無狀態(tài)服務(wù)的認證方法、服務(wù)器及系統(tǒng)。
背景技術(shù):
http協(xié)議是一種無狀態(tài)的協(xié)議,這就意味著如果用戶需向應(yīng)用提供了用戶名和密碼來進行用戶認證,且在下一次請求時,用戶再次進行用戶認證才行,因為根據(jù)http協(xié)議,我們并不能知道是哪個用戶發(fā)出的請求,所以為了讓應(yīng)用能識別是哪個用戶發(fā)出的請求,我們只能在服務(wù)器存儲一份用戶登錄的信息,這份登錄信息會在響應(yīng)時傳遞給瀏覽器,告訴其保存為cookie,以便下次請求時發(fā)送給我們的應(yīng)用,這樣我們的應(yīng)用就能識別請求來自哪個用戶了,這就是傳統(tǒng)的基于session認證。但是這種基于session的認證使應(yīng)用本身很難得到擴展,隨著不同客戶端用戶的增加,獨立的服務(wù)器已無法承載更多的用戶,而這時候基于session認證應(yīng)用的問題就會暴露出來。因此,如何實現(xiàn)無狀態(tài)服務(wù)的認證,是本領(lǐng)域技術(shù)人員需要解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于無狀態(tài)服務(wù)的認證方法、服務(wù)器及系統(tǒng),以實現(xiàn)無狀態(tài)服務(wù)的認證。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術(shù)方案:
一種基于無狀態(tài)服務(wù)的認證方法,包括:
接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);
解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;
根據(jù)所述用戶身份信息響應(yīng)所述請求。
其中,所述標記信息的生成方法包括:
接收客戶端發(fā)送的用戶身份信息,并對所述用戶身份信息進行驗證;
若驗證成功,則利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,并發(fā)送至客戶端,以使客戶端將所述標記信息存儲在cookie中。
其中,所述接收客戶端發(fā)送的用戶身份信息,并對所述用戶身份信息進行驗證,包括:
接收客戶端發(fā)送的用戶名和登陸密碼;
從用戶身份信息庫中查找是否存在所述用戶名;
若存在,則判斷所述登陸密碼是否正確;若不存在,則向所述客戶端返回所述用戶身份信息無效的提示信息;
若所述登陸密碼正確,則判定所述用戶身份信息驗證成功。
其中,所述利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,包括:
利用JWT技術(shù),將所述用戶身份信息裝載至Claims對象,對所述Claims對象配置標記的有效期時間和加密算法,并通過compact方法生成所述標記信息。
一種基于無狀態(tài)服務(wù)的認證服務(wù)器,包括:
第一接收模塊,用于接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);
解析模塊,用于解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;
響應(yīng)模塊,用于根據(jù)所述用戶身份信息響應(yīng)所述請求。
其中,所述認證服務(wù)器還包括:
第二接收模塊,用于接收客戶端發(fā)送的用戶身份信息;
驗證模塊,用于對所述用戶身份信息進行驗證;
標記信息生成模塊,用于在所述用戶身份信息驗證成功后,利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,并發(fā)送至客戶端,以使客戶端將所述標記信息存儲在cookie中。
其中,所述第二接收模塊接收的用戶身份信息包括用戶名和登陸密碼;
所述驗證模塊包括:
查找單元,用于從用戶身份信息庫中查找是否存在所述用戶名;
發(fā)送單元,用于在所述用戶身份信息庫中不存在所述用戶名時,向所述客戶端返回所述用戶身份信息無效的提示信息;
判斷單元,用于在所述用戶身份信息庫中存在所述用戶名時,判斷所述登陸密碼是否正確;若所述登陸密碼正確,則判定所述用戶身份信息驗證成功。
其中,所述標記信息生成模塊利用JWT技術(shù),將所述用戶身份信息裝載至Claims對象,對所述Claims對象配置標記的有效期時間和加密算法,并通過compact方法生成所述標記信息。
一種基于無狀態(tài)服務(wù)的認證系統(tǒng),包括上述任意一項所述的認證服務(wù)器,還包括:
客戶端,用于向所述認證服務(wù)器發(fā)送攜帶標記信息的請求。
其中,所述客戶端包括:
發(fā)送模塊,用于向所述認證服務(wù)器發(fā)送用戶身份信息;
存儲模塊,用于接收所述認證服務(wù)器發(fā)送的與所述用戶身份信息對應(yīng)的標記信息,并將所述標記信息存儲至cookie。
通過以上方案可知,本發(fā)明實施例提供的一種基于無狀態(tài)服務(wù)的認證方法,包括:接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;根據(jù)所述用戶身份信息響應(yīng)所述請求;可見,在本實施例中,將與用戶身份信息對應(yīng)的標記信息存儲至客戶端,不需服務(wù)器保存會話信息,能實現(xiàn)服務(wù)器的輕負載,易擴展,且標記信息結(jié)構(gòu)簡單易傳輸;本發(fā)明還公開了一種基于無狀態(tài)服務(wù)的認證服務(wù)器及系統(tǒng),同樣能實現(xiàn)上述技術(shù)效果。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種基于無狀態(tài)服務(wù)的認證方法流程示意圖;
圖2為本發(fā)明實施例公開的認證流程示意圖;
圖3為本發(fā)明實施例公開的一種基于無狀態(tài)服務(wù)的認證系統(tǒng)結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種基于無狀態(tài)服務(wù)的認證方法、服務(wù)器及系統(tǒng),以實現(xiàn)無狀態(tài)服務(wù)的認證。
參見圖1,本發(fā)明實施例提供的一種基于無狀態(tài)服務(wù)的認證方法,包括:
S101、接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);
需要說明的是,所述標記信息的生成方法包括:
步驟一、接收客戶端發(fā)送的用戶身份信息,并對所述用戶身份信息進行驗證;
具體的,本方案中的步驟一包括:
1)接收客戶端發(fā)送的用戶名和登陸密碼;
2)從用戶身份信息庫中查找是否存在所述用戶名;若存在,則判斷所述登陸密碼是否正確;若不存在,則向所述客戶端返回所述用戶身份信息無效的提示信息;
3)若所述登陸密碼正確,則判定所述用戶身份信息驗證成功。
需要說明的是,參見圖2,本方案中的用戶身份信息包括用戶名和登錄密碼,用戶在首次登陸時需要將用戶身份信息發(fā)送至服務(wù)器,通過服務(wù)器對用戶身份信息進行驗證,若通過驗證,則向客戶端發(fā)送一個能代表已經(jīng)驗證通過的標記信息,這個標記信息中包含了該用戶的登錄信息,并將該標記信息存儲至客戶端,以使客戶端每次向服務(wù)器發(fā)送請求時附上這個標記,既能代表用戶身份、又能表征該用戶身份已被驗證。
步驟二、若驗證成功,則利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,并發(fā)送至客戶端,以使客戶端將所述標記信息存儲在cookie中。
其中,所述利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,包括:利用JWT技術(shù),將所述用戶身份信息裝載至Claims對象,對所述Claims對象配置標記的有效期時間和加密算法,并通過compact方法生成所述標記信息。
需要說明的是,本方案中的標記信息可以使用JWT(json格式網(wǎng)絡(luò)令牌)技術(shù)實現(xiàn),具體的實現(xiàn)方法是:通過createTokenForUser方法把接收到的用戶登錄信息裝載到Claims對象,Jwts對對象配置標記的有效期時間和加密算法,最后通過compact方法生成帶有用戶登錄信息的標記信息返回至客戶端,并儲存在cookie中。
S102、解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;
S103、根據(jù)所述用戶身份信息響應(yīng)所述請求。
具體的,由于服務(wù)器接收到標記信息則代表與標記信息對應(yīng)的用戶身份信息驗證成功,因此無需在服務(wù)器上另存所有用戶的登錄信息,從而減輕了服務(wù)器的負載,并且通過parseUserFromToken方法對標記信息進行解析,即通過相同的加密算法解析出用戶登錄信息,并根據(jù)解析出的登錄信息向客戶端返回響應(yīng)信息。
下面對本發(fā)明實施例提供的認證服務(wù)器進行介紹,下文描述的認證服務(wù)器與上文描述的認證方法可以相互參照。
參見圖3,本發(fā)明實施例提供的一種基于無狀態(tài)服務(wù)的認證服務(wù)器,包括:
第一接收模塊100,用于接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);
解析模塊200,用于解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;
響應(yīng)模塊300,用于根據(jù)所述用戶身份信息響應(yīng)所述請求。
基于上述技術(shù)方案,本方案包括:
第二接收模塊,用于接收客戶端發(fā)送的用戶身份信息;
驗證模塊,用于對所述用戶身份信息進行驗證;
標記信息生成模塊,用于在所述用戶身份信息驗證成功后,利用JWT技術(shù)生成與所述用戶身份信息對應(yīng)的標記信息,并發(fā)送至客戶端,以使客戶端將所述標記信息存儲在cookie中。
基于上述技術(shù)方案,所述第二接收模塊接收的用戶身份信息包括用戶名和登陸密碼;
所述驗證模塊包括:
查找單元,用于從用戶身份信息庫中查找是否存在所述用戶名;
發(fā)送單元,用于在所述用戶身份信息庫中不存在所述用戶名時,向所述客戶端返回所述用戶身份信息無效的提示信息;
判斷單元,用于在所述用戶身份信息庫中存在所述用戶名時,判斷所述登陸密碼是否正確;若所述登陸密碼正確,則判定所述用戶身份信息驗證成功。
基于上述技術(shù)方案,所述標記信息生成模塊利用JWT技術(shù),將所述用戶身份信息裝載至Claims對象,對所述Claims對象配置標記的有效期時間和加密算法,并通過compact方法生成所述標記信息。
本發(fā)明實施例提供一種基于無狀態(tài)服務(wù)的認證系統(tǒng),包括上述實施例所述的認證服務(wù)器,還包括:
客戶端,用于向所述認證服務(wù)器發(fā)送攜帶標記信息的請求。
其中,所述客戶端包括:
發(fā)送模塊,用于向所述認證服務(wù)器發(fā)送用戶身份信息;
存儲模塊,用于接收所述認證服務(wù)器發(fā)送的與所述用戶身份信息對應(yīng)的標記信息,并將所述標記信息存儲至cookie。
本發(fā)明實施例提供的一種基于無狀態(tài)服務(wù)的認證方法,包括:接收客戶端發(fā)送的攜帶標記信息的請求;其中,所述標記信息與用戶身份信息相對應(yīng);解析所述標記信息,生成與所述標記信息對應(yīng)的用戶身份信息;根據(jù)所述用戶身份信息響應(yīng)所述請求;可見,在本實施例中,將與用戶身份信息對應(yīng)的標記信息存儲至客戶端,不需服務(wù)器保存會話信息,能實現(xiàn)服務(wù)器的輕負載,易擴展,且標記信息結(jié)構(gòu)簡單易傳輸;本發(fā)明還公開了一種基于無狀態(tài)服務(wù)的認證服務(wù)器及系統(tǒng),同樣能實現(xiàn)上述技術(shù)效果。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。