sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中
sso集成shiro
介紹
單一登錄(SSO)和相關令牌交換機制正在成為Web上不同環境中身份驗證和授權的最常見方案,尤其是在遷移到云中時。
本文討論了Keycloak與jBPM或Drools應用程序的集成,以便使用Keycloak上提供的所有功能。 Keycloak是用于瀏覽器應用程序和RESTful Web服務的集成SSO和IDM。 在Keycloak的主頁上進一步了解它。
與Keycloak集成的結果具有許多優勢,例如:
- 為包括jBPM和Drools工作臺在內的不同客戶提供集成的SSO和IDM環境
- 社交登錄–使用您的Facebook,Google,Linkedin等帳戶
- 用戶會話管理
- 以及更多…
下一節將介紹Keycloak的以下集成點:
- 通過Keycloak服務器進行工作臺身份驗證 :它基本上包括通過Keycloak SSO保護Web客戶端和遠程服務客戶端。 因此,無論是Web界面還是遠程服務使用者(無論是用戶還是服務)都將通過KC進行身份驗證。
- 通過Keycloak服務器執行服務器認證 :包括保護執行服務器提供的遠程服務(因為它不提供Web界面)。 任何遠程服務使用者(無論是用戶還是服務)都將通過KC進行身份驗證。
- 消費遠程服務 :本節描述第三方客戶端如何使用由Workbench和Execution Server提供的遠程服務端點。
情境
將下圖視為本文示例的環境:
示例場景
Keycloak是一個獨立的過程,可提供遠程身份驗證,授權和管理服務,這些服務可能會被一個或多個jBPM應用程序通過網絡使用。
考慮以下用于構建此環境的主要步驟:
- 安裝和設置Keycloak服務器
- 為此示例創建和設置領域-配置領域的客戶端,用戶和角色
- 安裝和設置SSO客戶端適配器和jBPM應用程序
筆記:
- 最終的環境和本文的不同配置均基于jBPM(KIE)工作臺,但是相同的環境也可以應用于KIE Drools工作臺。
- 本示例使用最新的6.4.0.CR2社區發行版
步驟1 –安裝和設置Keycloak服務器
Keycloak提供了廣泛的文檔以及有關在不同環境中進行安裝的幾篇文章。 本節介紹了用于構建示例的集成環境的最小設置。 如果需要更多信息,請參考Keycloak文檔 。
以下是最小化Keycloak安裝和設置的步驟:
Keycloak管理控制臺將位于http:// localhost:8180 / auth / admin (使用admin / admin作為登錄憑據)。
第2步–創建并設置演示領域
安全領域用于限制對不同應用程序資源的訪問。
Keycloak服務器運行之后,下一步就是創建領域。 該領域將為jBPM應用程序提供不同的用戶,角色,會話等。
Keycloak提供了幾個領域創建和管理的示例 ,從官方示例到帶有更多示例的不同文章。
您可以手動創建領域,也可以僅導入給定的json文件。
逐步創建領域
請按照以下步驟操作,以創建本文稍后使用的演示領域:
- 客戶編號: kie
- 客戶端協議: openid-connect
- 訪問類型: 機密
- 根URL: http:// localhost:8080
- 基本網址: /kie-wb-6.4.0.Final
- 重定向URI: /kie-wb-6.4.0.Final/*
生成的kie客戶端設置屏幕:
KIE客戶端的設置
注意 :如您在上述設置中所看到的,它被認為是應用程序上下文路徑的值kie-wb-6.4.0.Final 。 如果將jbpm應用程序部署在其他上下文路徑,主機或端口上,請在此處使用您的具體設置。
能夠使用jBPM工作臺中的演示領域的最后一步是創建應用程序的用戶和角色:
- 轉到“角色”部分,并創建角色admin , kiemgmt和rest-all 。
- 轉到“用戶”部分并創建管理員用戶。 在“憑據”選項卡中將密碼設置為“ password”,然后取消設置臨時開關。
- 在“用戶”部分中,導航到“ 角色映射”選項卡,然后將admin, kiegmmt和rest-all角色分配給admin用戶
管理員用戶的角色映射
導入演示領域
兩者都導入:
- 演示領域–單擊“ 添加領域”并使用demo-realm.json文件
- 領域用戶–導入演示領域后,在主菜單中單擊“ 導入” ,然后使用demo-users-0.json文件作為導入源
此時,Keycloak服務器正在主機上運行,??并使用最小配置集進行設置。 讓我們轉到jBPM工作臺設置。
步驟3 –安裝和設置jBPM工作臺
對于本教程,讓我們將Wildfly用作jBPM工作臺的應用程序服務器,就像jBPM安裝程序默認情況下那樣。
讓我們假設,在運行jBPM安裝程序之后,將$ JBPM_HOME作為已部署應用程序的Wildfly服務器的根路徑。
步驟3.1 –安裝KC適配器
為了使用jBPM應用程序中的Keycloak身份驗證和授權模塊,必須在$ JBPM_HOME的服務器上安裝用于Wildfly的Keycloak適配器 。 Keycloak開箱即用為不同容器提供了多個適配器,如果您正在使用另一個容器或需要使用另一個適配器,請查看Keycloak文檔中的適配器配置 。 以下是安裝和設置Wildfly 8.2.x適配器的步驟:
步驟3.2 –配置KC適配器
將KC適配器安裝到Wildfly中后,下一步是配置適配器,以指定不同的設置,例如身份驗證服務器的位置,要使用的領域等。
Keycloak提供了兩種配置適配器的方法:
- 每個WAR配置
- 通過Keycloak子系統
在此示例中,我們使用第二個選項,使用Keycloak子系統,因此我們的WAR不受此類設置的影響。 如果要使用per WAR方法,請在此處查看 。
編輯配置文件$ JBPM_HOME / standalone / configuration / standalone-full.xml并找到子系統配置部分。 添加以下內容:
<subsystem xmlns="urn:jboss:domain:keycloak:1.1"><secure-deployment name="kie-wb-6.4.0-Final.war"><realm>demo</realm><realm-public-key>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Q3RNbrVBcY7xbpkB2ELjbYvyx2Z5NOM/9gfkOkBLqk0mWYoOIgyBj4ixmG/eu/NL2+sja6nzC4VP4G3BzpefelGduUGxRMbPzdXfm6eSIKsUx3sSFl1P1L5mIk34vHHwWYR+OUZddtAB+5VpMZlwpr3hOlfxJgkMg5/8036uebbn4h+JPpvtn8ilVAzrCWqyaIUbaEH7cPe3ecou0ATIF02svz8o+HIVQESLr2zPwbKCebAXmY2p2t5MUv3rFE5jjFkBaY25u4LiS2/AiScpilJD+BNIr/ZIwpk6ksivBIwyfZbTtUN6UjPRXe6SS/c1LaQYyUrYDlDpdnNt6RboQIDAQAB</realm-public-key><auth-server-url>http://localhost:8180/auth</auth-server-url><ssl-required>external</ssl-required><resource>kie</resource><enable-basic-auth>true</enable-basic-auth><credential name="secret">925f9190-a7c1-4cfd-8a3c-004f9c73dae6</credential><principal-attribute>preferred_username</principal-attribute></secure-deployment> </subsystem>如果您在第2步中從本文中導入了示例json文件,則可以通過使用具體的部署名稱來使用與上述相同的配置。 否則,請使用您的值進行以下配置:
- 安全部署的名稱 –使用具體應用程序的WAR文件名
- 領域 –是應用程序將使用的領域,在我們的示例中,是在步驟2中創建的演示領域。
- 領域公鑰 –在此提供演示領域的公鑰。 這不是強制性的,如果未指定,將從服務器中檢索它。 否則,您可以在Keycloak管理控制臺->領域設置(用于演示領域)->密鑰中找到它
- 身份驗證服務器URL – Keycloak身份驗證服務器的URL
- 資源 –在步驟2中創建的客戶端的名稱。在我們的示例中,使用值kie 。
- 啟用基本身份驗證 –在此示例中,我們還啟用基本身份驗證機制,因此客戶端可以同時使用令牌(Baerer)和基本方法來執行請求。
- 憑據 –使用kie客戶端的密碼值。 您可以在Keycloak管理控制臺->客戶端-> kie->憑據選項卡->復制密鑰值中找到它。
對于此示例,您必須注意將您的具體值用于安全部署名稱 , realm-public-key和憑據密碼。 您可以在此處找到有關KC適配器配置的詳細信息。
步驟3.3 –運行環境
此時,Keycloak服務器已在主機上啟動并運行,并且已為jBPM應用程序服務器安裝并配置了KC適配器。 您可以使用以下命令運行該應用程序:
$JBPM_HOME/bin/standalone.sh -c standalone-full.xml服務器啟動后,您可以導航到該應用程序: http:// localhost:8080 / kie-wb-6.4.0.Final
jBPM和SSO –登錄頁面
使用Keycloak的管理員用戶憑據登錄: admin / password
通過Keycloak保護工作臺遠程服務
jBPM和Drools工作臺都提供了不同的遠程服務端點,第三方客戶端可以使用遠程API來使用這些端點。
為了通過Keycloak驗證這些服務,必須禁用BasicAuthSecurityFilter ,對jBPM的WAR文件中的WEB-INF / web.xml文件(應用程序部署描述符)進行那些修改:
重要說明 :使用遠程服務的用戶必須是角色rest-all的成員。 如第2步所述,此示例中的admin用戶已經是rest-all角色的成員。
執行服務器
KIE Execution Server提供的REST API比任何第三方客戶端都可以使用。 本節介紹如何將KIE Execution Server與Keycloak SSO集成在一起,以便將第三方客戶端身份管理委派給SSO服務器。
考慮到以上環境正在運行,因此請考慮具有以下條件:
- 在http:// localhost:8180 / auth上運行并偵聽的Keycloak服務器
- 一個名為demo的領域,其jBPM Workbench的客戶端名為kie
- 在http:// localhost:8080 / kie-wb-6.4.0-Final運行的jBPM工作臺
請按照以下步驟將執行服務器添加到此環境中:
- 在Keycloak上為執行服務器創建客戶端
- 安裝安裝程序和執行服務器(帶有KC客戶端適配器)
步驟1 –在Keycloak上為執行服務器創建客戶端
根據要部署的每個執行服務器,您必須在Keycloak的演示領域中創建一個新客戶端。
在此示例中,先前步驟中已經創建的admin用戶是用于客戶端請求的管理員用戶。 因此,請確保管理員用戶是角色kie-server的成員,以便使用執行服務器的遠程服務。 如果角色不存在,請創建它。
注意:此示例認為執行服務器將配置為使用200端口偏移量運行,因此HTTP端口將在localhost:8280可用
步驟2 –安裝和設置KC客戶端適配器和執行服務器
此時,一個名為kie-execution-server的客戶端已準備就緒,可以在KC服務器上從執行服務器上使用。 讓我們安裝,設置和部署執行服務器:
如果與本示例不同,請考慮您的具體環境設置:
- 安全部署名稱->使用正在部署的執行服務器war文件的名稱
- 公鑰->使用演示領域公鑰或將其保留為空白,如果是這樣,服務器將提供一個
- 資源->這次,而不是WB配置中使用的kie客戶端,請使用kie-execution-server客戶端
- 啟用基本身份驗證->由您決定。 您可以為第三方服務使用者啟用基本身份驗證
- 憑據->將密鑰用于kie-execution-server客戶端。 您可以在KC管理控制臺的“ 憑據”標簽中找到它。
步驟3 –部署和運行執行服務器
只需使用任何可用機制在Wildfly中部署執行服務器即可。
使用以下命令運行執行服務器:
$EXEC_SERVER_HOME/bin/standalone.sh -c standalone-full.xml -Djboss.socket.binding.port-offset=200 -Dorg.kie.server.id=<ID> -Dorg.kie.server.user=<USER> -Dorg.kie.server.pwd=<PWD> -Dorg.kie.server.location=<LOCATION_URL> -Dorg.kie.server.controller=<CONTROLLER_URL> -Dorg.kie.server.controller.user=<CONTROLLER_USER> -Dorg.kie.server.controller.pwd=<CONTOLLER_PASSWORD>例:
$EXEC_SERVER_HOME/bin/standalone.sh -c standalone-full.xml -Djboss.socket.binding.port-offset=200 -Dorg.kie.server.id=kieserver1 -Dorg.kie.server.user=admin -Dorg.kie.server.pwd=password -Dorg.kie.server.location=http://localhost:8280/kie-server-6.4.0.Final/services/rest/server -Dorg.kie.server.controller=http://localhost:8080/kie-wb-6.4.0.Final/rest/controller -Dorg.kie.server.controller.user=admin -Dorg.kie.server.controller.pwd=password重要說明 :將使用執行服務器遠程服務端點的用戶必須具有分配的角色kie-server。 因此,在KC管理控制臺中為將使用執行服務器遠程服務的用戶創建并分配此角色。
一旦啟動,您可以將服務器狀態檢查為(針對該請求考慮使用基本身份驗證,請參閱下一個使用遠程服務以獲取更多信息):
curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/消費遠程服務
為了使用工作臺或執行服務器提供的不同遠程服務,您的客戶端必須在KC服務器上進行身份驗證,并且必須具有有效的令牌才能執行請求。
注意 :請記住,為了使用遠程服務,經過身份驗證的用戶必須已分配:
- 使用WB遠程服務的所有角色
- 使用Execution Server遠程服務的角色kie-server
請確保已創建必要的角色并將其分配給將在Keycloak管理控制臺上使用遠程服務的用戶。
您有兩個選擇可以使用不同的刪除服務端點:
- 如果應用程序的客戶端支持基本身份驗證,則使用它
- 使用基于承載(令牌)的身份驗證
使用基本身份驗證
如果KC客戶端適配器配置啟用了基本身份驗證(如本指南中針對WB( 步驟3.2 )和Execution Server所建議的那樣),則可以避免令牌授予/刷新調用,而只需調用服務即可,如以下示例所示。
WB遠程存儲庫端點的示例:
curl http://admin:password@localhost:8080/kie-wb-6.4.0.Final/rest/repositories檢查執行服務器狀態的示例:
curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/使用基于令牌的身份驗證
第一步是在Keycloak上創建一個新客戶端,該客戶端允許第三方遠程服務客戶端獲取令牌。 可以通過以下方式完成:
- 轉到KC管理控制臺,然后使用以下配置創建新客戶端 :
- 客戶編號: kie-remote
- 當我們將要手動獲取令牌并調用服務時,讓我們稍微延長令牌的壽命。 在生產訪問令牌中,令牌應具有相對較低的超時,最好少于5分鐘:
- 轉到KC管理控制臺
創建用于遠程客戶端的公共客戶端后,您現在可以通過對KC服務器的令牌端點執行HTTP請求來獲取令牌。 這是命令行示例:
RESULT=`curl --data "grant_type=password&client_id=kie-remote&username=admin&passwordpassword=<the_client_secret>" http://localhost:8180/auth/realms/demo/protocol/openid-connect/token`TOKEN=`echo $RESULT | sed 's/.*access_token":"//g' | sed 's/".*//g'`此時,如果您回顯$ TOKEN ,它將輸出從KC服務器獲得的令牌字符串,該令牌字符串現在可用于授權對遠程端點的進一步調用。 例如,如果要檢查內部jBPM存儲庫:
curl -H "Authorization: bearer $TOKEN" http://localhost:8080/kie-wb-6.4.0.Final/rest/repositories翻譯自: https://www.javacodegeeks.com/2016/03/keycloak-sso-integration-jbpm-drools-workbench.html
sso集成shiro
總結
以上是生活随笔為你收集整理的sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲜怎么组词 鲜字怎么组词
- 下一篇: 壳可以组什么词 壳如何组词