oauth2快速入門教程

一 快速啟動

1 在項目中加入相關的依賴

需要 導入 易水公共組件spring-security-oauth2-autoconfigure兩個依賴

<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.yishuifengxiao.common</groupId>
    <artifactId>common-spring-boot-starter</artifactId>
    <version>4.1.2</version>
</dependency>


2 在項目加入以下代碼

    @Configuration
    public class CustomOauth2Config extends OAuth2Config{

    }

3 加上開啟注解

加上@EnableResourceServer@EnableAuthorizationServer注解

完全開啟示例代碼如下:

@Configuration
@EnableWebSecurity
@EnableResourceServer
@EnableAuthorizationServer
public class SecurityConfig extends AbstractSecurityConfig {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 調(diào)用父類中的默認配置
        applyAuthenticationConfig(http);
    }

    @Configuration
    public class CustomOauth2Config extends OAuth2Config{

    }

}

4 實現(xiàn)自定義認證邏輯

實現(xiàn)UserDetailsService接口 和 UserDetailsService接口性宏,完成自己的認證邏輯伪节,并將其注入到spring 的上下文中

【特別注意】在用戶未按照此步驟配置自己的授權邏輯時祝峻,組件會默認進行一個缺省實現(xiàn)。在缺省實現(xiàn)的情況下貌夕,用戶能使用任意用戶名配合密碼(12345678)進行登錄

需要特別注意的是,在下面的授權方式之中声诸,UserDetailsService負責校驗clientIdclientSecret是否正確钮科,UserDetailsService負責校驗usernamepassword是否正確。

完成前面的步驟之后奄喂,一個簡單的oauth2認證服務器就搭建完成了之剧。

二 四種授權方式

密碼模式

POST /oauth/token HTTP/1.1
     Host: oauth2.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=password&username=johndoe&password=A3ddj3w

在請求中,各參數(shù)的含義如下

  • grant_type:表示授權類型砍聊,此處的值固定為"password",必選項贰军。
  • username:表示用戶名玻蝌,必選項蟹肘。
  • password:表示用戶的密碼,必選項俯树。
  • scope:表示權限范圍帘腹,可選項。
  • Authorization: 請求頭參數(shù) 许饿,值是 clientId:clientSecret 經(jīng)過 base64 編碼后的值

下面是一個響應的例子

{
    "access_token": "BDF867DE69F05143C709",
    "token_type": "bearer",
    "refresh_token": "d7cda8fb15714209a9f9f3b039a0034f",
    "expires_in": 43199,
    "scope": "read write trust",
    "client_id": "yishui"
}

客戶端模式

POST /oauth/token HTTP/1.1
     Host: oauth2.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=client_credentials

在本請求中阳欲,各參數(shù)的含義如下

  • grant_type:表示授權類型,此處的值固定為"client_credentials"陋率,必選項球化。
  • Authorization: 請求頭參數(shù) ,值是 clientId:clientSecret 經(jīng)過 base64 編碼后的值

下面是一個響應的例子

{
    "access_token": "BDF867DE69F05143D3BF",
    "token_type": "bearer",
    "expires_in": 43199,
    "scope": "read write trust",
    "client_id": "yishui"
}

同密碼模式相比瓦糟,客戶端模式的響應中缺少了 refresh_token 參數(shù)

授權碼模式

授權碼模式首先需要保證 spring security 的登陸功能正惩灿蓿可用。只有開啟 spring security 的登陸功能可用菩浙,才能開啟授權碼功能巢掺。

先訪問一下請求

GET /oauth/authorize?response_type=code&client_id=yishui&state=xyz
&redirect_uri=http://demo.yishuifengxiao.com/demo HTTP/1.1
Host: oauth2.yishuifengxiao.com

在本請求中,各參數(shù)的含義如下:

  • code:表示授權碼劲蜻,必選項陆淀。該碼的有效期應該很短,通常設為 10 分鐘先嬉,客戶端只能使用該碼一次轧苫,否則會被授權服務器拒絕。該碼與客戶端 ID 和重定向 URI坝初,是一一對應關系浸剩。
  • state:如果客戶端的請求中包含這個參數(shù),認證服務器的回應也必須一模一樣包含這個參數(shù)鳄袍。
  • client_id: 用戶的 client_id

在進行此請求時绢要,假如用戶沒有登錄,spring security 會進行攔截拗小,因此需要用戶先進行登錄重罪。

在正常情況下,訪問以上請求會被重定向到

http://demo.yishuifengxiao.com/demo?code=fsfsdf
&state=xyz

服務器回應客戶端的 URI哀九,包含以下參數(shù):

  • code:表示授權碼剿配,必選項。該碼的有效期應該很短阅束,通常設為 10 分鐘呼胚,客戶端只能使用該碼一次,否則會被授權服務器拒絕息裸。該碼與客戶端 ID 和重定向 URI蝇更,是一一對應關系沪编。
  • state:如果客戶端的請求中包含這個參數(shù),認證服務器的回應也必須一模一樣包含這個參數(shù)年扩。

通過上面的請求得到了code以后蚁廓,用戶需要使用下面請求獲取到授權碼

POST /oauth/token HTTP/1.1
Host: oauth2.yishuifengxiao.com
Authorization: Basic fdsfdsfdsfds
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=fsfsdf
&redirect_uri=demo.yishuifengxiao.com/demo

在本請求中,各參數(shù)的含義如下:

  • grant_type:表示使用的授權模式厨幻,必選項相嵌,此處的值固定為"authorization_code"。
  • code:表示上一步獲得的授權碼况脆,必選項饭宾。
  • redirect_uri:表示重定向 URI,必選項漠另,且必須與 A 步驟中的該參數(shù)值保持一致捏雌。
  • client_id:表示客戶端 ID,必選項笆搓。

簡化模式

GET /oauth/authorize?response_type=token&client_id=yishui&state=xyz
        &redirect_uri=http://demo.com/demo    HTTP/1.1
    Host: server.example.com

在本請求中性湿,各參數(shù)的含義如下:

  1. response_type:表示授權類型,此處的值固定為"token"满败,必選項肤频。
  2. client_id:表示客戶端的 ID,必選項算墨。
  3. redirect_uri:表示重定向的 URI宵荒,可選項。
  4. scope:表示權限范圍净嘀,可選項报咳。
  5. state:表示客戶端的當前狀態(tài),可以指定任意值挖藏,認證服務器會原封不動地返回這個值暑刃。

刷新 token

POST /oauth/token HTTP/1.1
     Host: oauth2.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=refresh_token&refresh_token=sdff

請求中個參數(shù)的含義:

  • granttype:表示使用的授權模式,此處的值固定為"refreshtoken"膜眠,必選項岩臣。
  • refresh_token:表示早前收到的更新令牌,必選項宵膨。
  • scope:表示申請的授權范圍架谎,不可以超出上一次申請的范圍,如果省略該參數(shù)辟躏,則表示與上一次一致谷扣。

三 access_token 使用

通過 前面的方法獲取到 access_token 之后,一般有兩種使用方法

  • 將 access_token 做為請求參數(shù)攜帶在 url 參數(shù)上

http://demo.yishuifengxiao.com/user/123?access_token=獲得到的access_token

  • 將 access_token 做為請求參數(shù)放在請求頭中

在所有需要授權的請求的請求頭里都攜帶上參數(shù)
Authorization=Bearer 獲得到的 access_token

在通用組件中捎琐,由于對access_token進行了深度處理抑钟,因此用戶可以access_token通過易水工具包里的 DES 工具飯解析出 token 里攜帶的信息涯曲。

在解密時需要使用的密鑰由【安全管理】中設置的yishuifengxiao.security.secret-key屬性值決定。

下面是一個 access_token 的解密信息示例

{
    "username": "yishui",
    "clientId": "admin",
    "roles": [
        "ROLE_USER",
        "admin"
    ],
    "grantType": "password"
}

解密信息的各參數(shù)的解釋:

  • username: 用戶登錄時使用到的用戶名(在客戶端模式下該值為空)
  • clientId: 用戶登錄時使用的 clientId(在簡化模式下該值為空)
  • roles: 此登錄用戶擁有的角色(即此用戶的 authorities)
  • grantType:access_token 對應的授權類型

access_token反解析出用戶信息僅限于本組件在塔,原生的 oauth2 的access_token不支持此功能

資源鏈接

易水公共組件官方文檔地址http://doc.yishuifengxiao.com

易水公共組件源碼地址https://gitee.com/zhiyubujian/common-starter

易水風蕭個人博客 http://www.yishuifengxiao.com

相關博客

  1. swagger ui快速入門教程

  2. 基于易水公共組件的全局異常捕獲

  3. 基于易水公共組件的驗證碼快速入門教程

  4. oauth2快速入門教程

  5. springboot整合單點登錄sso

  6. 搭建基于易水公共組件的資源服務器

  7. spring security之獲取當前用戶信息

  8. 基于易水公共組件的權限管理系統(tǒng)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拨黔,隨后出現(xiàn)的幾起案子蛔溃,更是在濱河造成了極大的恐慌,老刑警劉巖篱蝇,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贺待,死亡現(xiàn)場離奇詭異,居然都是意外死亡零截,警方通過查閱死者的電腦和手機麸塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涧衙,“玉大人哪工,你說我怎么就攤上這事』“ィ” “怎么了雁比?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撤嫩。 經(jīng)常有香客問我偎捎,道長,這世上最難降的妖魔是什么序攘? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任茴她,我火速辦了婚禮,結(jié)果婚禮上程奠,老公的妹妹穿的比我還像新娘丈牢。我一直安慰自己,他們只是感情好梦染,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布赡麦。 她就那樣靜靜地躺著,像睡著了一般帕识。 火紅的嫁衣襯著肌膚如雪泛粹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天肮疗,我揣著相機與錄音晶姊,去河邊找鬼。 笑死伪货,一個胖子當著我的面吹牛们衙,可吹牛的內(nèi)容都是我干的钾怔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蒙挑,長吁一口氣:“原來是場噩夢啊……” “哼宗侦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忆蚀,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矾利,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馋袜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體男旗,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年欣鳖,在試婚紗的時候發(fā)現(xiàn)自己被綠了察皇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡泽台,死狀恐怖什荣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情师痕,我是刑警寧澤溃睹,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站胰坟,受9級特大地震影響因篇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笔横,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一竞滓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吹缔,春花似錦商佑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晚碾,卻和暖如春抓半,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背格嘁。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工笛求, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓探入,卻偏偏與公主長得像狡孔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜂嗽,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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

  • OAuth是一個關于授權(authorization)的開放網(wǎng)絡標準苗膝,在全世界得到廣泛應用,目前的版本是2.0...
    上善若水任意云閱讀 2,185評論 0 4
  • 1. 引言 周末逛簡書植旧,看了一篇寫的極好的文章荚醒,點擊大紅心點贊,就直接給我跳轉(zhuǎn)到登錄界面了隆嗅,原來點贊是需要登錄的。...
    圣杰閱讀 4,367評論 3 83
  • 1.前言 前段時間公司取消了Android崗侯繁,在面臨失業(yè)沒有飯碗天天吃土的壓迫下胖喳,我轉(zhuǎn)崗變成JAVA工程師。雖然J...
    老匡話Android閱讀 1,924評論 0 11
  • 什么是三方授權? 第三方授權就是贮竟,委托第三方來對既定的用戶進行鑒定丽焊,鑒定成功之后,下發(fā)信任憑證咕别,信任憑證和用戶掛鉤...
    一只小哈閱讀 32,533評論 2 21
  • 三欄布局一般指左右兩欄固定寬度技健,中間一欄自適應的布局方法,也是許多網(wǎng)站常用的布局方式惰拱。如下圖: 該示例在一個htm...
    zkhChris閱讀 1,159評論 0 8