一種基於json驗證碼的安全認證攔截的方法與流程
2023-09-21 05:04:20 3

本發明涉及計算機軟體技術領域,具體地說是一種基於json驗證碼的安全認證攔截的方法。
背景技術:
在分布式環境下的應用,資源訪問的安全性非常重要,如果系統資源可以不經登錄就可以直接訪問,那麼系統內的資源隨時有洩露的危險,造成不可估量的損失。另外,在分布式環境下,對用戶行為進行安全認證攔截,性能要求會更高。我們在保證信息安全的同時,也必須保證安全審計不會造成性能壓力,以提高安全審計的效率。
傳統的安全認證攔截方式,都是需要依賴session來存儲用戶的id和上下文信息,需要佔用大量伺服器內存。通過檢測session是否已經存在來判斷用戶是否已經登錄。在分布式環境下,會有海量用戶同時在線,包含大量的用戶信息的session數據很快會把伺服器內存耗盡,容易造成宕機。因此,session模式並不適用於同時有海量在線用戶的分布式環境。基於此,現提供一種基於json驗證碼的安全認證攔截的方法,通過採用json驗證碼的方式,是無狀態的,將存儲的壓力分散到了各個客戶端中,防止用戶在沒有登錄系統的情況下,直接訪問系統資源,並且不佔用伺服器資源,不影響訪問效率。
技術實現要素:
本發明的技術任務是針對以上不足之處,提供一種基於json驗證碼的安全認證攔截的方法。
一種基於json驗證碼的安全認證攔截的方法,其實現過程為:首先將系統內所有的訪問連結都視為系統的資源,只有成功登陸的用戶,才可以訪問,未登錄的用戶不能訪問;在成功登錄後,給用戶授予一個json驗證碼,當用戶訪問系統資源時,用戶的每個訪問請求都附上該json驗證碼,即沒有json驗證碼、或者是json驗證碼過期的訪問請求,均認定為非法請求,不授予權限。
用戶登錄時獲取json驗證碼的過程為:
當用戶在客戶端登錄時,客戶端向後臺的服務端發送用戶名和密碼,且密碼傳輸時進行加密;
服務端在用戶名密碼驗證通過後,查看緩存中是否有用戶信息,如果沒有則訪問資料庫得到用戶信息;
然後將用戶的信息保存在可信的服務端緩存中;
服務端將用戶信息傳給驗證碼生成器,為該用戶創建一個經過加密的json驗證碼。
用戶獲取的json驗證碼保存在客戶端的瀏覽器cookie中,該cookie中不保存用戶信息,用戶的信息保存在服務端,即該cookie為驗證碼的儲存地址。
基於上述驗證碼,用戶訪問系統資源的過程為:
當用戶發出訪問請求時,從cookie中取出驗證碼,添加在訪問請求的報文頭部中以post方式傳遞到服務端;
服務端接收到客戶端的訪問請求後,先判斷其報文頭部有沒有驗證碼,如果有驗證碼,則先解密,檢查驗證碼是否正確,是否已經過期;如果沒有驗證碼,或者驗證碼過期,或者驗證碼為偽造的,則拒絕資源請求;如果判斷驗證碼有效,則返回給用戶請求的資源。
當瀏覽器關閉後,cookie自動被清除,服務端存儲信息到時間自動失效。
本發明的一種基於json驗證碼的安全認證攔截的方法和現有技術相比,具有以下有益效果:
本發明的一種基於json驗證碼的安全認證攔截的方法,大幅度提升了分布式環境下伺服器的訪問效率,避免了海量用戶同時在線造成宕機的情況,並且json驗證碼都經過AES265加密的,且具有時效性的,避免了被截獲後信息洩露的風險;系統中用戶的上下文信息並不保存在客戶端,而是保存在服務端的可信緩存中,進一步保障了訪問的安全性,當token超時或過期後,提供續期機制,讓用戶體驗更順暢,實用性強,適用範圍廣泛,具有很好的推廣應用價值。
附圖說明
附圖1為本發明的實現流程圖。
具體實施方式
下面結合附圖及具體實施例對本發明作進一步說明。
如附圖1所示,本發明提供一種基於json驗證碼的安全認證攔截的方法,發明的目的在於防止用戶在沒有登錄系統的情況下,直接訪問系統資源。
其實現過程為:首先將系統內所有的訪問連結都視為系統的資源,只有成功登陸的用戶,才可以訪問,未登錄的用戶不能訪問;在成功登錄後,給用戶授予一個json驗證碼,當用戶訪問系統資源時,用戶的每個訪問請求都附上該json驗證碼,即沒有json驗證碼、或者是json驗證碼過期的訪問請求,均認定為非法請求,不授予權限。
具體過程為:
用戶登錄,向後臺發送用戶名和密碼。密碼傳輸時需要加密。
服務端在用戶名密碼驗證通過後,如果緩存中沒有用戶信息,訪問資料庫得到用戶信息。
將用戶的信息保存在可信的服務端緩存中,避免頻繁訪問資料庫。
服務端將用戶信息傳給驗證碼生成器,為該用戶創建一個經過加密的json驗證碼,該驗證碼通過AES265加密,並且此驗證碼是有時效性的,即使被截獲或者被洩露也會很快失效。
將此驗證碼保存到客戶端cookie當中。cookie中不保存用戶的任何信息,用戶的信息都在服務端,避免信息洩露,此時只是把 cookie 當作一個儲存機制,而不是一種驗證機制,所以沒有 XSRF 攻擊的危險。
當用戶點擊菜單時,從cookie中取出驗證碼,添加在訪問請求的報文頭部中以post方式傳遞到伺服器端。
服務端接收到一個客戶端的資源請求後,會先判斷其報文頭部有沒有驗證碼,有驗證碼的話,會先解密,檢查驗證碼是否正確,是否已經過期。如果沒有驗證碼,或者驗證碼過期,或者驗證碼是偽造的,會拒絕資源請求。如果判斷驗證碼有效,才會返回給用戶請求的資源。
當瀏覽器關閉後,cookie自動被清除,服務端存儲信息到時間自動失效。
在 tokens 的使用中,一旦 token 過期,只需要重新獲取一個。服務端提供接口刷新 token,刷新後得到一個更新了有效期的 token,同時舊token失效。
基於json驗證碼的安全認證攔截的方法,與傳統的安全認證攔截技術目的都是判斷用戶的訪問是否登錄用戶的操作,如果是未經登陸授權的操作,就攔截。傳統的方式是通過session進行的。通過校驗session是否存在,來判斷用戶是否已經登錄。而且信息未經過加密,不安全。本發明則是通過json驗證碼在服務端校驗來實現的。
服務端不需要存貯記錄用戶的登錄狀態的session的信息。不需要保存任何登錄用戶的狀態。
通過本發明,可實現以下兩點:
一是為了提高分布式環境下高並發情況下的訪問效率。分布式環境下,海量用戶登錄,同時在線的用戶數量龐大,存儲大量的session數據給伺服器帶來巨大的壓力。本發明的實現方式,不需要在服務端存儲大量的登錄信息,只需要在客戶端保存加密憑據,從而大幅度的降低了服務端的壓力。
二是為了提高用戶訪問的安全性。服務端攔截客戶端發來的每個請求,通過驗證請求是否帶著合法的token驗證碼來驗證用戶是否已經登錄。防止用戶在沒有登錄系統的情況下,直接訪問系統資源,造成信息洩露和惡意訪問,破壞信息系統安全。並且產生的json驗證碼都進行了加密,並且設置了時效性,有效保障json驗證碼的可信度。
在本發明中,伺服器端不需要存儲用戶的登錄狀態,服務端只需要驗證客戶端json驗證碼是否合法即可。減少了服務端的內存壓力。採用服務端緩存技術,將用戶信息有效的緩存在起來,進一步減輕了訪問資料庫的壓力。並且客戶端只存貯了用戶唯一標識和json驗證碼,不會存儲密碼這種敏感信息,避免了人為惡意攻擊客戶端造成密碼洩露。同時json驗證碼是有時效性的,默認240分鐘失效,即使被截獲,也不會給夠進行暴力破解的時間,避免了截獲後的信息洩露風險。而且json驗證碼是經過AES256加密算法加密,有效保證了信息的安全。
通過上面具體實施方式,所述技術領域的技術人員可容易的實現本發明。但是應當理解,本發明並不限於上述的具體實施方式。在公開的實施方式的基礎上,所述技術領域的技術人員可任意組合不同的技術特徵,從而實現不同的技術方案。
除說明書所述的技術特徵外,均為本專業技術人員的已知技術。