docker run --name kc-orgs -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak start-dev --features organization
2024 年 6 月 20 日,作者:Pedro Igor
親愛的 Keycloak 社群:
感謝社群和紅帽 IT 的許多人共同努力,我們在 Keycloak 25 中推出了 Keycloak 組織功能。
我們很高興宣布,我們已開始一段漫長的旅程,以支援客戶身分與存取管理 (CIAM),並在一定程度上支援多租戶,當領域需要與客戶和業務夥伴等第三方整合時。
Keycloak 組織功能利用 Keycloak 現有的身分與存取管理 (IAM) 功能,以解決 CIAM 使用案例,例如企業對企業 (B2B) 和企業對企業對客戶 (B2B2C) 整合。透過利用領域的現有功能,此功能的首次發布提供了核心功能,允許領域與業務夥伴和客戶整合。
管理組織
管理組織成員
使用不同的策略加入成員,例如邀請連結和仲介
使用有關主體所屬組織的其他中繼資料來裝飾權杖
該功能最初作為技術預覽功能發布,最終目標是在 Keycloak 26 中提供支援。此功能的路線圖中還有許多其他功能,我們認為這組初始功能是該功能的核心,這將使我們能夠在其基礎上構建更多功能。因此,您的回饋非常重要,以確保我們走在解決 CIAM 實際使用案例的正確道路上。
請考慮查看我們的每晚版本,以查看最新更新和下一個主要版本中將會發布的內容。
有關該功能的更多詳細資訊,請參閱官方文件中提供的文件。
Keycloak 組織功能引入了使用者如何驗證領域身分,以識別使用者是在組織或領域的範圍內進行驗證的變更。
該功能在驗證方面引入的主要變更之一是,每當您驗證已啟用「組織」設定的領域身分時,都會引入身分優先的登入流程。
Keycloak 組織功能是一項技術預覽功能,需要在啟動(或建置伺服器的最佳化映像)時啟用
docker run --name kc-orgs -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak start-dev --features organization
一旦您執行上述命令,請確保您可以存取 https://127.0.0.1:8080/
上的伺服器,並使用以下憑證登入管理主控台
使用者名稱:admin
密碼:admin
讓我們從建立一個名為 orgdemo
的新領域開始。orgdemo
領域是一家想要與第三方(即「organizations
」)整合的第一方公司,以便他們的使用者可以存取在 orgdemo
領域中可用的用戶端應用程式提供的受保護資源。
為此,請透過管理主控台建立一個以 orgdemo
作為名稱的新領域。
orgdemo
領域中建立使用者您還需要在 orgdemo
領域中擁有某些使用者,才能驗證身分並遵循後續步驟。
mjane
使用者是一個領域使用者,其電子郵件帳戶與領域中的任何組織都不符。我們將使用此使用者來表示 orgdemo
領域中現有的「領域」使用者,該使用者與任何組織都沒有關聯。為此,請建立如下使用者
使用者名稱:mjane
電子郵件:mjane@orgdemo.com
名字:Mary
姓氏:Jane
請務必為此使用者設定密碼,以便您可以驗證領域身分。
現在,建立 alice@orga.com
使用者。此使用者將充當現有的領域使用者,其電子郵件符合設定給組織的其中一個網域,但還不是該組織的成員。此使用者可能是透過自行註冊、與自訂身分存放區整合,甚至是從領域中可用的身分提供者聯合建立的
使用者名稱:alice
電子郵件:alice@orga.com
名字:Alice
姓氏:Chains
請務必為此使用者設定密碼,以便您可以驗證領域身分。
建立領域時,會自動更新驗證流程,以啟用特定步驟來驗證身分和加入組織成員。更新的驗證流程如下
瀏覽器
首次代理登入
browser
流程的主要變更是它預設為身分優先的登入,以便在提示使用者輸入憑證之前先識別使用者。關於 first broker login
流程,主要變更是,一旦使用者透過與組織關聯的身分提供者進行驗證並成功完成流程,便會自動將使用者新增為組織成員。
是否應進行身分優先的登入的決定取決於領域中是否有任何組織可用。如果尚未存在任何組織,則使用者將遵循通常的步驟,使用使用者名稱和密碼或設定為 browser
流程的任何其他步驟來驗證身分。
嘗試存取 https://127.0.0.1:8080/realms/orgdemo/account
,您將會看到通常的登入頁面。從此頁面,您可以像往常一樣使用以下憑證驗證領域身分
使用者名稱:mjane
密碼:<password>
一旦您提交登入表單,您就會驗證領域身分,並自動重新導向至代表使用者執行的用戶端應用程式。在此情況下,為帳戶主控台。
現在,讓我們在 orgademo
領域中建立一個組織。為此,我們需要透過導覽至「領域設定
」頁面並啟用「組織
」設定,來為領域啟用組織。
一旦您啟用組織,您可以按一下功能表中的「組織
」區段。按一下「建立組織
」按鈕以建立新的組織,如下所示
名稱:OrgA Inc
網域:orga.com
建立 orga
組織後,請從用戶端應用程式登出,然後嘗試再次登入。此時,您應該會看到身分優先的登入頁面。
與之前的嘗試不同,orgdemo
領域有一個組織,並且驗證流程已變更為先識別使用者,然後再提示使用者輸入任何憑證。
在身分優先的登入頁面上,您仍然可以驗證 mjane
使用者的身分。但是,使用者現在將分兩個步驟進行驗證。第一步只會要求使用者輸入使用者名稱或電子郵件,然後在第二步中提供密碼。
嘗試再次登入 https://127.0.0.1:8080/realms/orgdemo/account/
,然後輸入 bob@orga.com
。在 orgdemo
領域中,沒有與該電子郵件關聯的帳戶。
如果不存在的使用者嘗試使用與組織網域相符的電子郵件網域進行驗證,則會再次顯示身分優先的登入頁面,並指示所提供的使用者名稱無效。此時,沒有理由在第二步中要求使用者提供憑證。
有多種方法可以註冊使用者,以便他可以驗證 orgdemo
領域的身分,並最終加入 orga
組織。
如果領域已啟用自行註冊設定,則使用者可以按一下身分優先的登入頁面上的「註冊
」連結,並在 orgdemo
領域建立帳戶。之後,管理員可以向使用者傳送邀請連結,或手動將其新增為 orga
組織的成員。
如果組織有一個未設定網域的身分提供者,並且它們被標記為「公開
」,則他們也可以按一下身分優先登入頁面上的身分提供者連結,以自動建立帳戶並在透過身分提供者進行驗證後加入 orga
組織。
與上述類似,如果組織設定了具有其中一個組織網域的身分提供者,則使用者將自動重新導向至身分提供者進行驗證,並在流程完成後自動建立帳戶並加入 orga
組織。
請參閱官方文件以取得更多詳細資訊。
嘗試再次登入 https://127.0.0.1:8080/realms/orgdemo/account/
,然後輸入 alice@orga.com
。
與之前不同,現在會向使用者顯示第二步,以提供憑證。鑑於使用者存在於 orgdemo
領域中,即使該使用者還不是組織成員,也應該可以驗證身分。
作為管理員,您可以稍後選擇邀請使用者加入組織,或手動將其新增至組織。
此功能允許您為與組織關聯的身分提供者設定網域。當您要確保使用特定電子郵件網域的使用者始終透過身分提供者進行驗證時,此功能非常有用。
讓我們建立一個 orga
領域,以便使用 orgdemo
領域的身分提供者從中聯合使用者,其中身分提供者將與 orga
組織關聯。
建立 orga
領域後,請在此領域建立一個 OpenID Connect 用戶端,如下所示
用戶端類型:OpenID Connect
用戶端 ID:orgdemo-broker
用戶端驗證:開啟
有效的重新導向 URI:*
(為了簡化起見使用 *
,請勿在生產環境中使用)
現在建立一個使用者,以便我們稍後可以使用來自 orgdemo
領域的身份提供者來聯合此使用者。
使用者名稱:jdoe
電子郵件:jdoe@orga.com
名字:John
姓氏:Doe
請務必為此使用者設定密碼,以便您可以驗證領域身分。
現在讓我們在 orgdemo
領域中建立一個 OpenID Connect 身份提供者,如下所示
別名:orga-broker
顯示名稱:OrgA Inc.
探索端點:https://127.0.0.1:8080/realms/orga/.well-known/openid-configuration
用戶端 ID:orgdemo-broker
客戶端密鑰:<當您在 orga 領域中建立 orgdemo-broker 客戶端時產生的憑證>
最後,讓我們將剛在 orgdemo
領域中建立的身份提供者與 orga
組織連結起來。為此,請點選選單中的「組織」部分,然後選擇「OrgA Inc」組織。導覽至「身份提供者」選項卡,然後點選「連結身份提供者」按鈕,並提供以下設定
身份提供者:orga-broker
網域:orga.com
當電子郵件網域符合時重新導向:開啟
再次嘗試登入 https://127.0.0.1:8080/realms/orgdemo/account/
並輸入 jdoe@orga.com
。使用者現在會自動重新導向到 orga
領域進行驗證。
當一個在領域中還不存在的使用者嘗試使用與組織網域匹配的電子郵件網域進行驗證,並且該網域也設定為與該組織關聯的身份提供者時,使用者會自動重新導向到該身份提供者。
這樣做之後,您現在可以使用以下憑證在 orga
領域進行驗證
使用者名稱:jdoe@orga.com
密碼:<password>
一旦使用者完成驗證,它將會自動重新導向回 orgdemo
領域以建立帳戶,並自動加入 orga
組織。
如果您重新以 jdoe@orga.com
使用者身分重新驗證,情況也是如此。但是,這次使用者已經與身份提供者連結,並且將始終通過該身份提供者進行驗證。
到目前為止,我們一直在使用 orgdemo
領域的帳戶控制台客戶端來驗證使用者。作為 OpenID Connect 客戶端,成功驗證後會發出一個存取權杖。
當在組織的上下文中進行驗證時,存取權杖會自動更新,其中包含有關使用者所屬組織的特定宣告。
要將特定於組織的宣告映射到權杖中,客戶端在向伺服器發送授權請求時需要請求 organization
範圍。
因此,權杖將包含如下的宣告
"organization": {
"orga": {}
}
客戶端(例如:來自 ID 權杖)和資源伺服器(例如:來自存取權杖)可以使用 organization
宣告,根據使用者所屬的組織來授權存取受保護的資源。
organization
範圍是領域中內建的**可選**客戶端範圍。因此,預設情況下,它會新增到領域中建立的任何客戶端。