我最近一直在研究如何給Keycloak的登錄頁(yè)面加上驗(yàn)證碼功能拂封,Keycloak的7.0.x目前是沒(méi)有登錄驗(yàn)證碼的。不過(guò)可惜的是贴见,到目前為止我也沒(méi)成功實(shí)現(xiàn)驗(yàn)證碼功能烘苹。但我在這個(gè)過(guò)程中發(fā)現(xiàn)了另外兩個(gè)Keycloak自帶的能替代驗(yàn)證碼的功能。
暴力檢測(cè)(Brute Force Detection)
首先我們需要明確片部,驗(yàn)證碼(CAPTCHA)到底有什么作用镣衡。我從百度百科搜索到的定義如下:
驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類(lèi)的圖靈測(cè)試)的縮寫(xiě)霜定,是一種區(qū)分用戶(hù)是計(jì)算機(jī)還是人的公共全自動(dòng)程序±扰福可以防止:惡意破解密碼望浩、刷票、論壇灌水惰说,有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶(hù)用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試磨德,實(shí)際上用驗(yàn)證碼是現(xiàn)在很多網(wǎng)站通行的方式,我們利用比較簡(jiǎn)易的方式實(shí)現(xiàn)了這個(gè)功能吆视。這個(gè)問(wèn)題可以由計(jì)算機(jī)生成并評(píng)判典挑,但是必須只有人類(lèi)才能解答。由于計(jì)算機(jī)無(wú)法解答CAPTCHA的問(wèn)題啦吧,所以回答出問(wèn)題的用戶(hù)就可以被認(rèn)為是人類(lèi)您觉。
那么我們現(xiàn)在知道了,驗(yàn)證碼的一個(gè)重要功能是防止暴力破解密碼授滓。如果只說(shuō)防止暴力破解這個(gè)功能琳水,Keycloak其實(shí)內(nèi)置了相似的功能。這就是暴力檢測(cè)般堆。
配置
配置暴力檢測(cè)只需要在realm->安全防護(hù)->強(qiáng)力檢測(cè)中開(kāi)啟此功能在孝。
開(kāi)啟暴力檢測(cè)功能后。如遇到暴力檢測(cè)淮摔,可以臨時(shí)鎖定賬號(hào)私沮,或永久鎖定賬號(hào)(需開(kāi)啟Permanent Lockout)。
臨時(shí)鎖定賬號(hào)后噩咪,過(guò)一段時(shí)候后顾彰,該賬號(hào)會(huì)自動(dòng)解鎖。永久鎖定的賬號(hào)胃碾,需要登錄keycloak管理控制臺(tái)手動(dòng)解鎖。
其他的一些配置我們可以看給出的字段筋搏。例如仆百,最大登錄失敗次數(shù)指的是,密碼輸錯(cuò)3次后鎖定賬戶(hù)奔脐。
OTP驗(yàn)證
什么是OTP
如果你玩過(guò)一款叫做《夢(mèng)幻西游》的游戲俄周,那你大概知道將軍令這個(gè)東西。這個(gè)東西是一個(gè)安全防護(hù)實(shí)體工具髓迎。目的是為了保護(hù)玩家賬號(hào)安全峦朗。具體使用上就是會(huì)給你一個(gè)電子表一樣的東西,上面有個(gè)按鈕排龄,每次一按就出現(xiàn)一組數(shù)字波势。
在輸入賬號(hào)密碼的時(shí)候需要額外輸入將軍令上顯示的數(shù)字,然后才能登陸。
這種每次登陸都需要輸入尺铣,每次的密碼都不一樣的登錄方式就是OTP(One Time Password拴曲,也就是一次性口令)
一次性密碼(One Time Password,簡(jiǎn)稱(chēng)OTP)凛忿,又稱(chēng)“一次性口令”澈灼,是指只能使用一次的密碼。一次性密碼是根據(jù)專(zhuān)門(mén)算法店溢、每隔60秒生成一個(gè)不可預(yù)測(cè)的隨機(jī)數(shù)字組合叁熔,iKEY一次性密碼已在金融、電信床牧、網(wǎng)游等領(lǐng)域被廣泛應(yīng)用荣回,有效地保護(hù)了用戶(hù)的安全。
OTP的大致原理是以時(shí)間差做為服務(wù)器與密碼產(chǎn)生器的同步條件叠赦。在需要登錄的時(shí)候驹马,就利用密碼產(chǎn)生器產(chǎn)生動(dòng)態(tài)密碼。生成的密碼在輸入之后即作廢除秀。
以前的手機(jī)普及力度不夠糯累,所以需要單獨(dú)購(gòu)買(mǎi)硬件載體來(lái)顯示密碼。現(xiàn)在手機(jī)幾乎人手一部册踩,因此現(xiàn)在使用手機(jī)App作為OTP密碼的載體泳姐。我們下面看看Keycloak中是如何使用OTP來(lái)驗(yàn)證登錄的。
如何使用FreeOTP
開(kāi)啟OTP需要在Keycloak的驗(yàn)證中在瀏覽器登陸流中把OTP Form設(shè)置為
REQUIRED
暂吉。然后我們從手機(jī)上下載一個(gè)FreeOTP App胖秒,打開(kāi)App之后掃描上面的二維碼或者輸入App上顯示的六位數(shù)字就可以登陸了。
你也可以在驗(yàn)證菜單的OTP策略中設(shè)置OTP的一些參數(shù)
參考文章
iOS Developer的全棧之路 - Keycloak(9) - 簡(jiǎn)書(shū)
OTP原理及實(shí)現(xiàn) - OSCHINA
一次性密碼 - 百度百科