iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

前面提到為了讓用戶能無痛使用各種服務,會需要一個共通的登入端口,所以首先要挑選一個負責使用者身份驗證跟權限管理的服務。

這一塊沒有直接列在 awesome-selfhosted 當中,而是外連到另一個 awesome-sysadmin 列表的 Identity Management 區塊上,有三個可以選。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582820/Screenshot_2024-09-17_at_9.39.05_PM_xgr9i2.png

看過一些討論後決定先由 KeyCloak 入手,蒐集到的論點主要有

  • 較完整的功能(雖然你可能不需要這麼多
  • 較高的安全性
  • 較陡的學習曲線

如果用的不順再來考慮試用看看 Authentik。

話不多說先快速啟動 Keycloak,使用 Docker 在本地架設

docker run -p 8080:8080 --name awsome-keycloak -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:25.0.4 start-dev

建好後可以開啟 Admin console,用上面指令裡的 KEYCLOAK_ADMIN 跟 KEYCLOAK_ADMIN_PASSWORD 登入,能夠看到畫面跟登入的話就是架設成功了。

首先來新增一個 Realm ,每個 Realm 用於管理各自獨立的用戶群,原本預設的 master 對應到Keycloak 系統自己的用戶群,不要直接用來作應用的用戶管理。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582934/Screenshot_2024-09-09_at_10.37.08_PM_wkwtmt.png

這邊打算用 NextJS 做主要的應用開發,所以先試著來跟 Keycloak 整合,

建立一個 Client 來給 NextJS 用,驗證方式選 OpenID。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582934/Screenshot_2024-09-11_at_9.29.59_PM_bd2kfx.png

下一步,開啟 Client Authentication 設定,限制這個 Client 需用 token 進行驗證後才能連線到 Keycloak。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582933/Screenshot_2024-09-09_at_10.57.41_PM_z4mhzp.png

設定登入跟登出後跳轉網址

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582934/Screenshot_2024-09-11_at_9.32.40_PM_lnengf.png

接著手動建立一個測試用戶來測試登入,隨意輸入一個 username

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582934/Screenshot_2024-09-11_at_9.35.55_PM_zqn5kf.png

User 建立好後可以到 Credentials 手動建立密碼

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726582933/Screenshot_2024-09-11_at_9.37.10_PM_exjeip.png

建立密碼時注意將 Temporary 勾選掉,如果開啟的話會在第一次登入後要求變更密碼。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1726583155/Screenshot_2024-09-11_at_9.38.11_PM_xz1gpv.png

接著就能到預設的 Account Console 測試登入用戶,中間的 realm name 要替換成剛剛建立的名稱

http://localhost:8080/realms/{{realm_name}}/account

上一篇
服務挑選基準
下一篇
Keycloak 與 NextJs 登入
系列文
Awesome self hosted 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言