Keycloak - 架設自己的SSO
透過keycloak能夠讓你快速擁有一個自己架設的OAuth伺服器,他是由RedHat開源維護的
透過keycloak能夠讓你快速擁有一個自己架設的OAuth伺服器,他是由RedHat開源維護的
Install
用docker架最快
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:17.0.0 start-dev
Config
會有一些部份要設定
先去到admin console, http://localhost:8080/admin
Realm
預設的區域會是master,可以自己再設一個
User
要在對應的realm下設定新的user (一樣在admin page但要選對realm)
新增一個user後再去Credentials設定密碼,勾選temp可以避免登入就要求改密碼
Account Console
這個就會是user的介面而不是keycloak server的admin Ui
到account console去更進一步的設定使用者的資訊http://localhost:8080/realms/myrealm/account
Allow First App
要設定可以允許的clinet
Verify
可以透過keycloak的網頁程式做個快速驗證,要填入剛剛設定的clinet name
Endpoints
keycloak-documentation/oidc-generic.adoc at main · keycloak/keycloak-documentation
如果要查看有哪些endpoints或是設定
/realms/{realm-name}/.well-known/openid-configuration
Login
瀏覽器內沒有合法cookie的話會先跳登入
/realms/{realm-name}/protocol/openid-connect/connect
登入成功後會拿到以下的cookie
- sessionId/ AUTH_SESSION_ID: 紀錄keycloak上對應的session id
Authorization
驗證權限
/realms/{realm-name}/protocol/openid-connect/auth
Token
透過瀏覽器帶的sessionId cookie去取得JWT token
這個token內有登入者的資訊
/realms/{realm-name}/protocol/openid-connect/token
User info
有token的話才能取得user的資訊
/realms/{realm-name}/protocol/openid-connect/userinfo
Logout
如果想要登出的話必須要告訴keycloak server要清空session
/realms/{realm-name}/protocol/openid-connect/logout
Demo Client
git clone https://github.com/keycloak/keycloak-quickstarts
cd keycloak-quickstarts/app-authz-jee-vanilla
如果想要使用java或是node.js的現成app來測試,可以去官方repo找
Postman
實際上在用postman登入時,由於用的是OAuth2所以會用到token endpoint
必須填上user, password, clinet跟grant_type
送出request之後就會拿到一長串的access token
這個access token就是JWT token,可以直接到jwt官網decode
或是你也可以選擇另外一種取得access token的方式
直接在postman選擇OAuth 2.0
設定好後就能選擇送出並取得access token
這種方式要在clinet的setting下加入postman的callback