還不會(huì)使用JWT格式化OAuth2令牌嗎符欠?

OAuth2默認(rèn)的AccessToken是由DefaultAccessTokenConverter生成瓶您,是具有唯一性的UUID隨機(jī)字符串舟陆,我們?nèi)绻胍褂?code>JWT來格式化AccessToken就需要使用JwtAccessTokenConverter來進(jìn)行格式化坠非,當(dāng)然如果你有自己獨(dú)特的業(yè)務(wù)可以自己實(shí)現(xiàn)AccessTokenConverter接口敏沉,并將實(shí)現(xiàn)類交付給IOC托管即可。

ApiBoot內(nèi)部集成了DefaultAccessTokenConverter(默認(rèn))炎码、JwtAccessTokenConverter赦抖,只需要一個(gè)配置就可以實(shí)現(xiàn)相互轉(zhuǎn)換。

博客原文地址:https://blog.yuqiyu.com/apiboot-security-oauth-use-jwt.html

相關(guān)文檔

ApiBoot Security OAuth組件系列文章

JWT加密秘鑰

對(duì)JWT了解的同學(xué)應(yīng)該知道舍杜,它內(nèi)部不可逆的部分采用的是RSA加密新娜,在加密過程中需要一個(gè)秘鑰,在JwtAccessTokenConverter實(shí)現(xiàn)類中采用了6位隨機(jī)字符串作為秘鑰既绩,相關(guān)源碼如下:

/**
 * Helper that translates between JWT encoded token values and OAuth authentication
 * information (in both directions). Also acts as a {@link TokenEnhancer} when tokens are
 * granted.
 *
 * @see TokenEnhancer
 * @see AccessTokenConverter
 *
 * @author Dave Syer
 * @author Luke Taylor
 */
public class JwtAccessTokenConverter implements TokenEnhancer, AccessTokenConverter, InitializingBean {
  .....

    private String verifierKey = new RandomValueStringGenerator().generate();

    private Signer signer = new MacSigner(verifierKey);

    private String signingKey = verifierKey;
}  

這種形式雖然在某一些層面上是唯一的概龄,實(shí)在感覺不太嚴(yán)謹(jǐn),所以ApiBoot添加一個(gè)配置饲握,可以自定義這個(gè)加密秘鑰signingKey字段私杜。

創(chuàng)建示例項(xiàng)目

為了本章的演示效果,我們使用IDEA來創(chuàng)建一個(gè)SpringBoot項(xiàng)目救欧,pom.xml文件內(nèi)相關(guān)的依賴如下所示:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.minbox.framework</groupId>
    <artifactId>api-boot-starter-security-oauth-jwt</artifactId>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.minbox.framework</groupId>
      <artifactId>api-boot-dependencies</artifactId>
      <version>2.2.0.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

依賴添加完成后下面我們配置下測(cè)試的用戶以及客戶端信息衰粹。

配置內(nèi)存用戶

我們?cè)讷@取AccessToken時(shí)使用的password授權(quán)類型,所以我們需要在application.yml文件內(nèi)配置登錄用戶所使用的用戶名笆怠、密碼铝耻,如下所示:

api:
  boot:
    security:
      users:
        - username: yuqiyu
          password: 123456

本章為了演示JWT格式化AccessToken,驗(yàn)證的用戶采用內(nèi)存方式配置蹬刷,了解詳情瓢捉。

開啟JWT轉(zhuǎn)換

ApiBoot OAuth2默認(rèn)使用DefaultAccessTokenConverter實(shí)現(xiàn)類來格式化AccessToken频丘,如果我們想要切換到JwtAccessTokenConverter,需要在application.yml添加一個(gè)配置泡态,如下所示:

api:
  boot:
    oauth:
      # 啟用JWT搂漠,用于格式化AccessToken
      jwt:
        enable: true

配置加密秘鑰

在本文開頭說到了JwtAccessTokenConverter實(shí)現(xiàn)類內(nèi)采用的是6位隨機(jī)字符串的方式來作為RSA加密的秘鑰,ApiBoot OAuth2提供了參數(shù)配置可以進(jìn)行自定義兽赁,如下所示:

api:
  boot:
    oauth:
      jwt:
        # 加密秘鑰
        sign-key: 恒宇少年

秘鑰格式不限状答,如:特殊字符串漢字刀崖、數(shù)字惊科、字母....

運(yùn)行測(cè)試

見證奇跡的時(shí)刻到了,我們通過IDEAXxxApplication方式來啟動(dòng)本章項(xiàng)目亮钦,嘗試使用CURL方式獲取AccessToken如下所示:

? ~ curl ApiBoot:ApiBootSecret@localhost:9090/oauth/token -d 'grant_type=password&username=yuqiyu&password=123456'
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXBpIl0sInVzZXJfbmFtZSI6Inl1cWl5dSIsInNjb3BlIjpbImFwaSJdLCJleHAiOjE1NzU5NTMwNDgsImF1dGhvcml0aWVzIjpbIlJPTEVfYXBpIl0sImp0aSI6ImQxMDNmNDYwLTk3YzMtNGNiZS05OWM4LWYzZjU2MmRhMDZhOCIsImNsaWVudF9pZCI6IkFwaUJvb3QifQ.HMHRBCIGPZNlkJPCnXaktMWxXEW-5roo7tdQR1JpCyY", 
    "token_type": "bearer", 
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXBpIl0sInVzZXJfbmFtZSI6Inl1cWl5dSIsInNjb3BlIjpbImFwaSJdLCJhdGkiOiJkMTAzZjQ2MC05N2MzLTRjYmUtOTljOC1mM2Y1NjJkYTA2YTgiLCJleHAiOjE1Nzg1Mzc4NDgsImF1dGhvcml0aWVzIjpbIlJPTEVfYXBpIl0sImp0aSI6ImY1NDMxZTMzLWE1YzMtNGVmNC1hZDM0LTk1MGQ3ODliYTRiZCIsImNsaWVudF9pZCI6IkFwaUJvb3QifQ.TfJ5vThvaibV2kVo2obHqnYzmYm-GsdtRLoB3RJbkrg", 
    "expires_in": 6925, 
    "scope": "api", 
    "jti": "d103f460-97c3-4cbe-99c8-f3f562da06a8"
}

ApiBoot OAuth有默認(rèn)的客戶端配置信息為ApiBoot馆截、ApiBootSecret,為了方便演示蜂莉,這里沒做修改蜡娶,如需修改請(qǐng)查看ApiBoot OAuth文檔,如果你感覺控制臺(tái)打印的json不美觀映穗,閱讀性太差窖张,可以使用在線格式化JSON工具.

敲黑板,劃重點(diǎn)

使用ApiBoot來格式化OAuth2AccessToken是不是特別簡(jiǎn)單蚁滋?省去了我們自己去創(chuàng)建JwtAccessTokenConverter實(shí)例宿接,然后還需要將實(shí)例放入IOC繁瑣的步驟,更多使用詳解敬請(qǐng)期待~~

代碼示例

如果您喜歡本篇文章請(qǐng)為源碼倉(cāng)庫(kù)點(diǎn)個(gè)Star辕录,謝謝D丽!走诞!
本篇文章示例源碼可以通過以下途徑獲取副女,目錄為apiboot-security-oauth-use-jwt

簽到送書活動(dòng)進(jìn)行中

自律改變?nèi)松阌钌倌昊仞伔劢z蚣旱,給大家的福利碑幅,請(qǐng)?jiān)L問https://blog.yuqiyu.com/welfare/了解詳情。

作者個(gè)人 博客
使用開源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塞绿,一起剝皮案震驚了整個(gè)濱河市枕赵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌位隶,老刑警劉巖拷窜,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡篮昧,警方通過查閱死者的電腦和手機(jī)赋荆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懊昨,“玉大人窄潭,你說我怎么就攤上這事〗桶洌” “怎么了嫉你?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躏惋。 經(jīng)常有香客問我幽污,道長(zhǎng),這世上最難降的妖魔是什么簿姨? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任距误,我火速辦了婚禮,結(jié)果婚禮上扁位,老公的妹妹穿的比我還像新娘准潭。我一直安慰自己,他們只是感情好域仇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布刑然。 她就那樣靜靜地躺著,像睡著了一般暇务。 火紅的嫁衣襯著肌膚如雪闰集。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天般卑,我揣著相機(jī)與錄音,去河邊找鬼爽雄。 笑死蝠检,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挚瘟。 我是一名探鬼主播叹谁,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乘盖!你這毒婦竟也來了焰檩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤订框,失蹤者是張志新(化名)和其女友劉穎析苫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衩侥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年国旷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茫死。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跪但,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峦萎,到底是詐尸還是另有隱情屡久,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布爱榔,位于F島的核電站被环,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搓蚪。R本人自食惡果不足惜蛤售,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妒潭。 院中可真熱鬧悴能,春花似錦、人聲如沸雳灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谎亩。三九已至炒嘲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匈庭,已是汗流浹背夫凸。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阱持,地道東北人夭拌。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衷咽,于是被迫代替她去往敵國(guó)和親鸽扁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容