iOS Developer的全棧之路 - Keycloak(2)

在上一節(jié)中,介紹了Keycloak的一些基本概念,從這一節(jié)開(kāi)始,我們一起來(lái)實(shí)操一下。整個(gè)流程大致分為如下幾步,并分布在Keycloak的系列章節(jié)中:

  1. 客戶端之間訪問(wèn)Keycloak,通過(guò)預(yù)先設(shè)置好的用戶名和密碼換取token;
  2. 了解Spring Security,使用spring security的kecloak adapter將Keycloak集成進(jìn)入spring,來(lái)保護(hù)一些endpoint;
  3. 通過(guò)Restful API在Keycloak中注冊(cè)新用戶;
  4. 如何使用Keycloak的multi-factor認(rèn)證
  5. 使用Keycloak來(lái)集成三方登錄;

安裝啟動(dòng)

這一部分可以按照官方教程一步一步做就好:
Keycloak下載Standalone server distribution的壓縮包(當(dāng)然也可以選擇docker版本安裝運(yùn)行),解壓后,在bin目錄下執(zhí)行./standalone.sh。該服務(wù)將啟動(dòng)在8080端口,不出意外的話,運(yùn)行命令后可以直接訪問(wèn) http://localhost:8080/auth,頁(yè)面會(huì)提示去配置初始的管理員用戶名和密碼。

配置Realm

默認(rèn)情況下,通過(guò)管理員身份登錄后進(jìn)入的realm為Master,client,user等信息不應(yīng)該添加在Master這個(gè)realm中,添加新的realm更方便于后期的管理維護(hù)。添加方式如下圖所示:


add realm.png

添加Client

接下來(lái),添加一個(gè)client。一個(gè)client為Keycloak保護(hù)的一個(gè)server,在微服務(wù)架構(gòu)下一個(gè)client就可以是一個(gè)client。切換到上一步創(chuàng)建好的realm,在右側(cè)的菜單中選中Clients,再點(diǎn)擊Create:


create client.png

填寫(xiě)一個(gè)Client ID,其余可以保持默認(rèn)值即可。

添加測(cè)試用戶

如下圖所示,菜單欄中選中Users,再點(diǎn)擊Add user,如下圖所示:


add user.png

在表單內(nèi)填入用戶名,點(diǎn)擊保存:


input username.png

會(huì)進(jìn)入用戶詳情的配置頁(yè)面,選中Credentials,進(jìn)入配置密碼的Tab,輸入密碼,同時(shí)關(guān)閉Temporary。Temporary通常用于管理添加用戶后,給用戶配置一個(gè)臨時(shí)密碼,當(dāng)用戶以用戶名和這個(gè)臨時(shí)密碼登錄時(shí),會(huì)提示用戶重置為自己的密碼。

但此處的目的是通過(guò)Postman直接通過(guò)向Keycloak發(fā)送請(qǐng)求獲取token,所以先關(guān)閉到Temporary這個(gè)開(kāi)關(guān)。

input password.png

通過(guò)Postman測(cè)試

到這里為止,Keycloak的最基本配置已經(jīng)完成,使用Postman來(lái)測(cè)試一下,url為 http://localhost:8080/auth/realms/foodie/protocol/openid-connect/token,path中realms之后的字符串foodie就是剛剛新增的realm。其余信息可參考下圖:

postman.png

通過(guò)該請(qǐng)求可獲取token,格式如下所示:

{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJwbkpFanJSUWg1R2s1R3hVUm5HZldvY1hEYV9STERUYk93Ny1jMk00RjlNIn0.eyJqdGkiOiJkYzZiZjMxOC04YTliLTRlMTYtYTU3Ni0wN2ViZWVkNTk5MjQiLCJleHAiOjE1NzY5ODI0MjMsIm5iZiI6MCwiaWF0IjoxNTc2OTgyMTIzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZm9vZGllIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjA2N2E4NmIzLWE4ZDktNGE5OC05YzJhLTQxMDZkODFlNzhiNiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImZvb2RpZSIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImIyNGZkM2RlLTA0YWQtNDFjMi05YjI1LWY2NTM2ZjhmYWRmNyIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoidXNlcjEifQ.Q_VYHdszBcBRHXStUgEe95qy425BUVlXzk1kMdEx0Py40Aulvpbn-koXX_5s53jFDCEqNJXIADjRUvr-2T3rH9PVvuCeUdJMmKBjXjTbZqwrHucb55MtJDJ9QujB6J5DHKSSCNMlXIqjZ1xU5znIX4LuViYsjgfsA5p0R4_1Wtx8jddhq1nsDsAKUWpapTAO-PgjvHBF6OAAEl9gf2kjv9ssOWhVZ1V0_Ik_n6ASQWSa57utIvqYPxvin4HgUmN3X-7rsuXb0WeCOMScrhy6Ba-xG8UT-nkBXEy73wh3B7rbcaTciVA6QLgcq-pAbTMlouiJc2ukaeSdfyw9kge5pA",
    "expires_in": 300,
    "refresh_expires_in": 1800,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0MzlmYWRhMS05MWY5LTRiYmEtYjViYi1mN2FlYzc1YTVhNTEifQ.eyJqdGkiOiI0ZDU3NzBlYS1jYzIyLTRlN2QtYjQyNC05NGM5MGFhNDVlYTEiLCJleHAiOjE1NzY5ODM5MjMsIm5iZiI6MCwiaWF0IjoxNTc2OTgyMTIzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZm9vZGllIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2Zvb2RpZSIsInN1YiI6IjA2N2E4NmIzLWE4ZDktNGE5OC05YzJhLTQxMDZkODFlNzhiNiIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJmb29kaWUiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJiMjRmZDNkZS0wNGFkLTQxYzItOWIyNS1mNjUzNmY4ZmFkZjciLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSJ9.IGu_ZfV2N9euHutVWTKj-GPcbz1a5ws2Ob7yYWuWwpM",
    "token_type": "bearer",
    "not-before-policy": 0,
    "session_state": "b24fd3de-04ad-41c2-9b25-f6536f8fadf7",
    "scope": "email profile"
}

此處的access_token和refresh_token均為JWT格式,可以使用jwt.io查看其中的信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我的夢(mèng)想是窮游——用城市的公交車,去看看這個(gè)城市,甚至世界。 而這個(gè)夢(mèng)想是家鄉(xiāng)的小鎮(zhèn)給予我的。 總以為我是土生土長(zhǎng)...
    靳慕閱讀 439評(píng)論 1 1
  • 觸動(dòng)自己的也許就是一個(gè)詞一句話又或者一個(gè)旋律。 等不到你 成為我 最閃亮的星星 我依然愿意 借給你我的光 ...
    借字書(shū)友會(huì)閱讀 1,258評(píng)論 16 0
  • 出門(mén)洗臉 開(kāi)門(mén)掃街
    銀河謎米閱讀 263評(píng)論 0 0
  • 在我國(guó)歷史上,東晉是一個(gè)非常特別的存在:由于西晉時(shí)期折騰太過(guò),皇室司馬家族的實(shí)力大衰,只能被迫與其他士族分享權(quán)力,...
    冷眼觀史閱讀 2,790評(píng)論 16 32
  • 洋蔥打卡278天 與其說(shuō)就是一場(chǎng)創(chuàng)造生命非常時(shí)刻的課程,不如說(shuō)這三天兩夜是場(chǎng)心與心的旅行。 從昨天到的啊,這個(gè)地方...
    20d43f9031f0閱讀 358評(píng)論 0 1

友情鏈接更多精彩內(nèi)容