延伸這一篇的內容:紀錄Openshift介接Keycloak與389 Directory Server,在LDAP內綁定user至group後,
發現LDAP的group並沒有被同步至keycloak和openshift。
1 | ldap:/ # dsidm localhost -b "dc=example,dc=com" organizationalunit create --ou Groups |
jdoe
belongs to group bu-1
william
belongs to group bu-2
注意underscore(_)在整合openshfit的時候會有一些問題(ex. 有設定RoleBinding但沒有發生效果),暫時先用hyphen(-)
有兩件事要處理
- LDAP的group同步至Keycloak
- Keycloak的group同步至Openshift
LDAP的group同步至keycloak
參考設定Keycloak v19串接Windows AD / LDAP - Jovepater,主要需設定User federation的Mapper,Mapper Type為group-ldap-mapper,LDAP Groups DN需對應LDAP的實際值,這邊是ou=Groups,dc=example,dc=com
設定完成後,手動同步
成功的話會出現在Keycloak Groups的清單
Keycloak的group同步至Openshift
這邊卡了一陣子,有找到官網的文件:Chapter 7. Configuring identity providers | Red Hat Product Documentation,但還是有點一頭霧水,只知道可能需要在openid的yaml內補上groups,其他部分不太確定要怎麼做,幸好2025年是生成式AI的時代,感謝Perpluxity
prompt如下
1 | I have a openshift cluster and a keycloak. I use OAuth in openshift with openid connect related with keycloak. |
Perpluxity的結果幫了很大的忙,了解除了Openshift端需要調整之外,原本的Identity Provider(Keycloak)也需要調整,也獲得一個關鍵的參考文章: Keycloak & Open Shift
有兩個主要修改
- 在Keycloak端的Client Scope新增Mapper,Mapper Type為Group Membership
- 在Openshift端的OAuth Configuration需加上claims的groups
Keycloak端新增Mapper
試了兩種方式,目前兩種都可以順利將Keycloak的group同步至Openshift
第一種是參考Perpluxity的結果,在特定Client內設定Client Scope的Mapper
這邊須注意Full group path要關閉,開啟的話登入會失敗
開或關的影響是在openid connect回傳的JWT ID Tokens內的groups內容,開啟的話例如: /bu-1,關閉的話僅保留 bu-1,沒有/,這部分會在下面驗證的段落看到實際例子
第二種參考這一篇Keycloak & Open Shift,在profile這個Client Scope內加入
同上,這邊須注意Full group path要關閉,開啟的話登入會失敗
Openshift端加上claims的groups
官網範例如下,關鍵是claim的groups:
1 | apiVersion: config.openshift.io/v1 |
Keycloak端和Openshift端都調整完成後,重新登入
成功啦! 感動涕零QQ
Keycloak端新增Mapper後如何驗證JWT ID Token的內容
這部分也卡了一陣子,生成式AI這次沒有辦法幫上忙,最後是從Keycloak & Open Shift這篇提到的group is not coming in jwt token in keycloak 23.0.0 - Stack Overflow進而摸索出來
使用下列方式取得JWT ID Token的內容
1 | curl -k --request POST \ |
經過JWT decode後,觀察是否出現groups的key
1 | { |