[Keycloak] 初探Keycloak

玩起來有點像是以前碰過的IdentityService

不需要自己實現驗證/授權相關的實做邏輯,交給他就行了!

不過 Keycloak 跟 IdentityService 不同的是他不需要依附在.net身上

作為一個獨立的服務,並且提供更完整的功能

這篇主要會把官方的介紹,濃縮一些認為重要的內容帶進來

以及照著官方的練習跟著實做

功能

keycloak的重點在身份驗證和授權,所以相關功能肯定有的

  • 單一登入
    • 透過keycloak進行身份驗證,各個應用程式不用各自處理登入/登出跟驗證服務
  • 社交網站登入
    • 例如 Google、Facebook,只有想不到沒有做不到
  • User Federation
    • 將外部數據視為Keycloak的儲存後端,依照需求載入或是同步到Keycloak
  • 支持 OpenID Connect、OAuth 2.0、SAML

也提供了強大UI後台,免除自己刻畫面或是直接動資料的困擾

  • Admin UI
    • 強大的UI工具,可以管理keycloak大多數的設定

名詞

先認識一下名詞,事後在操作才不會誤會

Keycloak中,最大的單位是 Realm,用來區分不同的領域(租戶),各自隔離且獨立

每個 Realm 底下可以有各自的:

  • Client 應用程式
  • User 使用者

Keycloak

首先最重要的步驟,先把Keycloak run 起來,我選擇用 podman 執行一個容器

getting-started-podman

Podman

podman run -p 8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.1.0 start-dev
  • 指定 port 8080
  • 指定 admin 的帳密
  • 使用版本 26.1.0

執行後開啟 localhost:8080,用 admin 登入

admin登入後,會提示應該要建立自己的使用者帳號,並且移除admin這個帳號

新增一個 user,並且設定Password(Credentials)和權限給他(Role mapping)

這邊要注意,左上角的 filter 要選擇 Filter by realm roles 才有admin相關的權限

image

新增後就可以嘗試登入,確認權限沒問題後,就可以把admin給移除了

接著回到realm,預設會有一個 Realm Master,根據的官方描述,

Master 是用來管理Keycloak的地方,不是用來管理應用程式

所以我們要新增一個用來管理應用程式的realm

Realm

左上角的 master 點開,就有一個 Create Realm

image

新增一個 realm MyRealm

我希望可以透過應用程式訪問 Keycloak

所以分別要建立 ClientUser

Client

新增一個client MyClient

Client Type選擇 OpenID Connect

啟用 Standard flowDirect access grants,建立

(後面測試的需要,Valid redirect URIs 需要設定為 https://www.keycloak.org/app/*

User

現在有Client了,但是沒有使用者,接著新增User

新增一個 user MyUser

Test

接著可以在Keyclock的測試網站測試登入能不能成功

https://www.keycloak.org/app/

參考資料

Keycloak