JWT轉(zhuǎn)換器
前面的例子中,都是在授權(quán)服務(wù)配置類中配置了一個很簡單的jwt轉(zhuǎn)換器奢浑,如下:
可以看到我們只用setSigningKey方法配置了一個秘鑰邦马,這里使用的是簡單的對稱加密的方式來加密jwt內(nèi)容眼虱,同時資源服務(wù)器中使用的也是同樣的秘鑰配置jwt轉(zhuǎn)換器:
除了對稱加密的方式,生產(chǎn)環(huán)境使用非常多的是更加安全的非對稱加密的方式來加密jwt僵朗。
生成公私鑰
公私鑰對可以使用jdk的命令 keytool 來生成赖欣,首先來看一下這個命令下有哪些參數(shù):
中文的參數(shù)說明很清晰屑彻,我們需要使用 -genkeypair 參數(shù)生成秘鑰對。再來看一下 keytool -genkeypair 之下還有哪些參數(shù):
這些都是設(shè)置密鑰對的屬性參數(shù)顶吮。下面我們來使用keytool命令生成JKS(Java KeyStore)文件社牲,命令如下:
- keytool -genkeypair -alias oauth2 -keyalg RSA -keypass oauth2 -keystore oauth2.jks -storepass oauth2
從參數(shù)說明可以看出,別名為 oauth2悴了,秘鑰算法為 RSA膳沽,秘鑰口令為 oauth2,秘鑰庫(文件)名稱為 oauth2.jks让禀,秘鑰庫口令為oauth2挑社。輸入命令回車后,后面還有七個問題需要回答巡揍,分別是(問題后面括號內(nèi)的內(nèi)容是我的回答):
您的名字與姓氏是什么?(oauth2)
您的組織單位名稱是什么?(oauth2)
您的組織名稱是什么?(oauth2)
您所在的城市或區(qū)域名稱是什么?(bj)
您所在的省/市/自治區(qū)名稱是什么?(bj)
該單位的雙字母國家/地區(qū)代碼是什么?(cn)
CN=oauth2, OU=oauth2, O=oauth2, L=bj, ST=bj, C=cn是否正確?(是)
最后一個回答 是 輸入完回車后痛阻,jks文件就生成了,具體過程如下:
生成的秘鑰庫文件如下:
生成完成后腮敌,將jks文件拷貝到resources文件夾下即可阱当。
修改授權(quán)服務(wù)配置類
這里只需要修改jwt轉(zhuǎn)換器即可:
其中,"oauth2".toCharArray() 這里配置的是口令糜工,getKeyPair("oauth2") 這里配置的是別名弊添。
根據(jù)jks文件獲取公鑰
輸入命令:
- keytool -list -rfc -keystore oauth2.jks -storepass oauth2
會打印出公鑰:
在資源服務(wù)的resources文件夾下面,新建一個pub.txt文件捌木,將公鑰復(fù)制進(jìn)去:
這里復(fù)制的內(nèi)容就是兩行等號之間的內(nèi)容油坝。
修改資源服務(wù)配置類
資源服務(wù)配置類也只需要修改jwt轉(zhuǎn)換器配置:
setSigningKey方法支持對稱和非對稱加密,它會對秘鑰進(jìn)行判斷刨裆,來看一下源碼:
測試
jwt轉(zhuǎn)換器加密方式修改完成了澈圈,測試流程按照以前的方式獲取令牌,訪問受保護(hù)資源即可:
訪問接口:
代碼地址:https://gitee.com/blueses/spring-boot-security 26 27
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布帆啃!