OAuth2.0之OLTU實現(xiàn)舉例

一废麻、場景

三個角色:用戶(user),web應(yīng)用(client)模庐,資源服務(wù)器和授權(quán)服務(wù)器合為服務(wù)器(server)

用戶登錄登錄后可查看自己的信息

二烛愧、準備

2.1 數(shù)據(jù)庫

schema

drop table if exists oauth2_client;
drop table if exists oauth2_user;

create table oauth2_user (
  id bigint auto_increment,
  username varchar(100),
  password varchar(100),
  salt varchar(100),
  constraint pk_oauth2_user primary key(id)
) charset=utf8 ENGINE=InnoDB;
create unique index idx_oauth2_user_username on oauth2_user(username);

create table oauth2_client (
  id bigint auto_increment,
  client_name varchar(100),
  client_id varchar(100),
  client_secret varchar(100),
  constraint pk_oauth2_client primary key(id)
) charset=utf8 ENGINE=InnoDB;
create index idx_oauth2_client_client_id on oauth2_client(client_id);

data

DELIMITER ;
delete from oauth2_user;
delete from oauth2_client;

insert into oauth2_user values(1,'admin','d3c59d25033dbf980d29554025c23a75','8d78869f470951332959580424d4bf4f');
insert into oauth2_client values(1,'chapter17-client','c1ebe466-1cdc-4bd3-ab69-77c3561b9dee','d8346ea2-6017-43ed-ad68-19c0f971738b');

2.2 Server

zetark-oauth2-server

修改數(shù)據(jù)庫鏈接 resources.properties

#dataSource configure
connection.url=jdbc:mysql://mysql-server:3306/shiro
connection.username=r00t
connection.password=r00t

2.3 Client

zetark-oauth2-client

三、過程分析

image

1)2)用戶訪問client首頁,檢測到用戶未登錄怜姿,重定向到login

image

3)4)點擊授權(quán)登錄慎冤,輸入admin/123456后點擊登錄并授權(quán)按鈕

image
image
// 3)授權(quán)請求  http://localhost:8080/zetark-oauth2-server/oauth2login
if (!isLogin && servletPath.startsWith("/login_authorize")) {
    String authorizeUrl = ClientParams.OAUTH_SERVER_AUTHORIZE_URL;
    authorizeUrl += "?client_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee";
    authorizeUrl += "&response_type=code";
    authorizeUrl += "&&redirect_uri=" + ClientParams.OAUTH_SERVER_REDIRECT_URI;
    response.sendRedirect(authorizeUrl);
    return;
}
// 4)授權(quán)響應(yīng)
if (!isLogin && servletPath.startsWith("/login_response")) {
    String code = request.getParameter("code");
    if (code != null) {
        
        // 6)7)令牌請求及響應(yīng) http://localhost:8080/zetark-oauth2-server/accessToken
        OAuthAccessTokenResponse tokenResponse = null;
        try {
            tokenResponse = OauthClient.makeTokenRequestWithAuthCode(code);
        } catch (OAuthProblemException e) {
            e.printStackTrace();
        } catch (OAuthSystemException e) {
            e.printStackTrace();
        }
        if (tokenResponse != null) {
            session.setAttribute("isLogin", true);
            session.setAttribute("token", tokenResponse.getAccessToken());
            session.setMaxInactiveInterval(tokenResponse.getExpiresIn().intValue());
            // 10)11) 根據(jù)token調(diào)用api
             String userInfoJson = OauthClient.getAuthedService(tokenResponse.getAccessToken());
            Map<String, Object> userInfo = new Gson().fromJson(userInfoJson, Map.class);
            System.out.println(userInfo);
            session.setAttribute("user", userInfo);
            response.sendRedirect("index");
            return;
        }
    } else {
        String errorDesc = request.getParameter("error_description");
        System.out.println("登錄失敗:" + errorDesc);
    }
}

訪問過程

image
client_uri:/
client_uri:/login
# 用戶訪問client首頁/,由于未登錄被重定向到/login頁面

client_uri:/login_authorize
server_uri:/oauth2login
# 用戶在/login頁面點擊授權(quán)登錄后沧卢,向server發(fā)起授權(quán)請求蚁堤,server返回登錄頁面/oauth2login

server_uri:/authorize
client_uri:/login_response
# 用戶在/oauth2login填寫用戶名密碼后點擊授權(quán)登錄后,server驗證后重定向到/login_resposne

server_uri:/accessToken
server_uri:/checkAccessToken
# client在處理/login_response時接收code并再發(fā)起令牌請求搏恤,server返回令牌

server_uri:/v1/openapi/userInfo
# client根據(jù)令牌信息請求api服務(wù)

client_uri:/index
# 向用戶返回/index頁面

四违寿、參考

https://github.com/ameizi/oltu-oauth2-example

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熟空,隨后出現(xiàn)的幾起案子藤巢,更是在濱河造成了極大的恐慌,老刑警劉巖息罗,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掂咒,死亡現(xiàn)場離奇詭異,居然都是意外死亡迈喉,警方通過查閱死者的電腦和手機绍刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挨摸,“玉大人孩革,你說我怎么就攤上這事〉迷耍” “怎么了膝蜈?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熔掺。 經(jīng)常有香客問我饱搏,道長,這世上最難降的妖魔是什么置逻? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任推沸,我火速辦了婚禮,結(jié)果婚禮上券坞,老公的妹妹穿的比我還像新娘鬓催。我一直安慰自己,他們只是感情好报慕,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布深浮。 她就那樣靜靜地躺著,像睡著了一般眠冈。 火紅的嫁衣襯著肌膚如雪飞苇。 梳的紋絲不亂的頭發(fā)上菌瘫,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音布卡,去河邊找鬼雨让。 笑死,一個胖子當(dāng)著我的面吹牛忿等,可吹牛的內(nèi)容都是我干的栖忠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼贸街,長吁一口氣:“原來是場噩夢啊……” “哼庵寞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起薛匪,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捐川,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逸尖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古沥,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年娇跟,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩齿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡苞俘,死狀恐怖盹沈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吃谣,我是刑警寧澤襟诸,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站基协,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏菇用。R本人自食惡果不足惜澜驮,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惋鸥。 院中可真熱鬧杂穷,春花似錦、人聲如沸卦绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滤港。三九已至廊蜒,卻和暖如春趴拧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背山叮。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工著榴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屁倔。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓脑又,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锐借。 傳聞我的和親對象是個殘疾皇子问麸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)钞翔,斷路器严卖,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 1. 引言 周末逛簡書,看了一篇寫的極好的文章嗅战,點擊大紅心點贊妄田,就直接給我跳轉(zhuǎn)到登錄界面了,原來點贊是需要登錄的驮捍。...
    圣杰閱讀 4,375評論 3 83
  • 有時候疟呐,面對老師布置的周末親子活動會略感煩躁,有點有失家長風(fēng)范东且,不可置否启具。心態(tài)很重要,充分理解珊泳,陪伴孩子是多...
    奈乖閱讀 555評論 0 50
  • 前言 這個系列是java spring mvc 源碼閱讀與分析的一個系列閱讀源碼分支為 spring初始化流程 ...
    金發(fā)萌音閱讀 805評論 0 1
  • 1.鏈家專享15個點,其他公司沒有15個點秧了。 2.順帶解釋下跨扮,點數(shù)一下放完的原因。 3.強調(diào)房子馬上漲價验毡,還有樓盤...
    6eae61b1a4e8閱讀 165評論 0 0