sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中
sso集成shiro
介紹
單一登錄(SSO)和相關(guān)令牌交換機(jī)制正在成為Web上不同環(huán)境中身份驗(yàn)證和授權(quán)的最常見方案,尤其是在遷移到云中時(shí)。
本文討論了Keycloak與jBPM或Drools應(yīng)用程序的集成,以便使用Keycloak上提供的所有功能。 Keycloak是用于瀏覽器應(yīng)用程序和RESTful Web服務(wù)的集成SSO和IDM。 在Keycloak的主頁上進(jìn)一步了解它。
與Keycloak集成的結(jié)果具有許多優(yōu)勢,例如:
- 為包括jBPM和Drools工作臺(tái)在內(nèi)的不同客戶提供集成的SSO和IDM環(huán)境
- 社交登錄–使用您的Facebook,Google,Linkedin等帳戶
- 用戶會(huì)話管理
- 以及更多…
下一節(jié)將介紹Keycloak的以下集成點(diǎn):
- 通過Keycloak服務(wù)器進(jìn)行工作臺(tái)身份驗(yàn)證 :它基本上包括通過Keycloak SSO保護(hù)Web客戶端和遠(yuǎn)程服務(wù)客戶端。 因此,無論是Web界面還是遠(yuǎn)程服務(wù)使用者(無論是用戶還是服務(wù))都將通過KC進(jìn)行身份驗(yàn)證。
- 通過Keycloak服務(wù)器執(zhí)行服務(wù)器認(rèn)證 :包括保護(hù)執(zhí)行服務(wù)器提供的遠(yuǎn)程服務(wù)(因?yàn)樗惶峁¦eb界面)。 任何遠(yuǎn)程服務(wù)使用者(無論是用戶還是服務(wù))都將通過KC進(jìn)行身份驗(yàn)證。
- 消費(fèi)遠(yuǎn)程服務(wù) :本節(jié)描述第三方客戶端如何使用由Workbench和Execution Server提供的遠(yuǎn)程服務(wù)端點(diǎn)。
情境
將下圖視為本文示例的環(huán)境:
示例場景
Keycloak是一個(gè)獨(dú)立的過程,可提供遠(yuǎn)程身份驗(yàn)證,授權(quán)和管理服務(wù),這些服務(wù)可能會(huì)被一個(gè)或多個(gè)jBPM應(yīng)用程序通過網(wǎng)絡(luò)使用。
考慮以下用于構(gòu)建此環(huán)境的主要步驟:
- 安裝和設(shè)置Keycloak服務(wù)器
- 為此示例創(chuàng)建和設(shè)置領(lǐng)域-配置領(lǐng)域的客戶端,用戶和角色
- 安裝和設(shè)置SSO客戶端適配器和jBPM應(yīng)用程序
筆記:
- 最終的環(huán)境和本文的不同配置均基于jBPM(KIE)工作臺(tái),但是相同的環(huán)境也可以應(yīng)用于KIE Drools工作臺(tái)。
- 本示例使用最新的6.4.0.CR2社區(qū)發(fā)行版
步驟1 –安裝和設(shè)置Keycloak服務(wù)器
Keycloak提供了廣泛的文檔以及有關(guān)在不同環(huán)境中進(jìn)行安裝的幾篇文章。 本節(jié)介紹了用于構(gòu)建示例的集成環(huán)境的最小設(shè)置。 如果需要更多信息,請(qǐng)參考Keycloak文檔 。
以下是最小化Keycloak安裝和設(shè)置的步驟:
Keycloak管理控制臺(tái)將位于http:// localhost:8180 / auth / admin (使用admin / admin作為登錄憑據(jù))。
第2步–創(chuàng)建并設(shè)置演示領(lǐng)域
安全領(lǐng)域用于限制對(duì)不同應(yīng)用程序資源的訪問。
Keycloak服務(wù)器運(yùn)行之后,下一步就是創(chuàng)建領(lǐng)域。 該領(lǐng)域?qū)閖BPM應(yīng)用程序提供不同的用戶,角色,會(huì)話等。
Keycloak提供了幾個(gè)領(lǐng)域創(chuàng)建和管理的示例 ,從官方示例到帶有更多示例的不同文章。
您可以手動(dòng)創(chuàng)建領(lǐng)域,也可以僅導(dǎo)入給定的json文件。
逐步創(chuàng)建領(lǐng)域
請(qǐng)按照以下步驟操作,以創(chuàng)建本文稍后使用的演示領(lǐng)域:
- 客戶編號(hào): kie
- 客戶端協(xié)議: openid-connect
- 訪問類型: 機(jī)密
- 根URL: http:// localhost:8080
- 基本網(wǎng)址: /kie-wb-6.4.0.Final
- 重定向URI: /kie-wb-6.4.0.Final/*
生成的kie客戶端設(shè)置屏幕:
KIE客戶端的設(shè)置
注意 :如您在上述設(shè)置中所看到的,它被認(rèn)為是應(yīng)用程序上下文路徑的值kie-wb-6.4.0.Final 。 如果將jbpm應(yīng)用程序部署在其他上下文路徑,主機(jī)或端口上,請(qǐng)?jiān)诖颂幨褂媚木唧w設(shè)置。
能夠使用jBPM工作臺(tái)中的演示領(lǐng)域的最后一步是創(chuàng)建應(yīng)用程序的用戶和角色:
- 轉(zhuǎn)到“角色”部分,并創(chuàng)建角色admin , kiemgmt和rest-all 。
- 轉(zhuǎn)到“用戶”部分并創(chuàng)建管理員用戶。 在“憑據(jù)”選項(xiàng)卡中將密碼設(shè)置為“ password”,然后取消設(shè)置臨時(shí)開關(guān)。
- 在“用戶”部分中,導(dǎo)航到“ 角色映射”選項(xiàng)卡,然后將admin, kiegmmt和rest-all角色分配給admin用戶
管理員用戶的角色映射
導(dǎo)入演示領(lǐng)域
兩者都導(dǎo)入:
- 演示領(lǐng)域–單擊“ 添加領(lǐng)域”并使用demo-realm.json文件
- 領(lǐng)域用戶–導(dǎo)入演示領(lǐng)域后,在主菜單中單擊“ 導(dǎo)入” ,然后使用demo-users-0.json文件作為導(dǎo)入源
此時(shí),Keycloak服務(wù)器正在主機(jī)上運(yùn)行,??并使用最小配置集進(jìn)行設(shè)置。 讓我們轉(zhuǎn)到j(luò)BPM工作臺(tái)設(shè)置。
步驟3 –安裝和設(shè)置jBPM工作臺(tái)
對(duì)于本教程,讓我們將Wildfly用作jBPM工作臺(tái)的應(yīng)用程序服務(wù)器,就像jBPM安裝程序默認(rèn)情況下那樣。
讓我們假設(shè),在運(yùn)行jBPM安裝程序之后,將$ JBPM_HOME作為已部署應(yīng)用程序的Wildfly服務(wù)器的根路徑。
步驟3.1 –安裝KC適配器
為了使用jBPM應(yīng)用程序中的Keycloak身份驗(yàn)證和授權(quán)模塊,必須在$ JBPM_HOME的服務(wù)器上安裝用于Wildfly的Keycloak適配器 。 Keycloak開箱即用為不同容器提供了多個(gè)適配器,如果您正在使用另一個(gè)容器或需要使用另一個(gè)適配器,請(qǐng)查看Keycloak文檔中的適配器配置 。 以下是安裝和設(shè)置Wildfly 8.2.x適配器的步驟:
步驟3.2 –配置KC適配器
將KC適配器安裝到Wildfly中后,下一步是配置適配器,以指定不同的設(shè)置,例如身份驗(yàn)證服務(wù)器的位置,要使用的領(lǐng)域等。
Keycloak提供了兩種配置適配器的方法:
- 每個(gè)WAR配置
- 通過Keycloak子系統(tǒng)
在此示例中,我們使用第二個(gè)選項(xiàng),使用Keycloak子系統(tǒng),因此我們的WAR不受此類設(shè)置的影響。 如果要使用per WAR方法,請(qǐng)?jiān)诖颂幉榭?。
編輯配置文件$ JBPM_HOME / standalone / configuration / standalone-full.xml并找到子系統(tǒng)配置部分。 添加以下內(nèi)容:
<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步中從本文中導(dǎo)入了示例json文件,則可以通過使用具體的部署名稱來使用與上述相同的配置。 否則,請(qǐng)使用您的值進(jìn)行以下配置:
- 安全部署的名稱 –使用具體應(yīng)用程序的WAR文件名
- 領(lǐng)域 –是應(yīng)用程序?qū)⑹褂玫念I(lǐng)域,在我們的示例中,是在步驟2中創(chuàng)建的演示領(lǐng)域。
- 領(lǐng)域公鑰 –在此提供演示領(lǐng)域的公鑰。 這不是強(qiáng)制性的,如果未指定,將從服務(wù)器中檢索它。 否則,您可以在Keycloak管理控制臺(tái)->領(lǐng)域設(shè)置(用于演示領(lǐng)域)->密鑰中找到它
- 身份驗(yàn)證服務(wù)器URL – Keycloak身份驗(yàn)證服務(wù)器的URL
- 資源 –在步驟2中創(chuàng)建的客戶端的名稱。在我們的示例中,使用值kie 。
- 啟用基本身份驗(yàn)證 –在此示例中,我們還啟用基本身份驗(yàn)證機(jī)制,因此客戶端可以同時(shí)使用令牌(Baerer)和基本方法來執(zhí)行請(qǐng)求。
- 憑據(jù) –使用kie客戶端的密碼值。 您可以在Keycloak管理控制臺(tái)->客戶端-> kie->憑據(jù)選項(xiàng)卡->復(fù)制密鑰值中找到它。
對(duì)于此示例,您必須注意將您的具體值用于安全部署名稱 , realm-public-key和憑據(jù)密碼。 您可以在此處找到有關(guān)KC適配器配置的詳細(xì)信息。
步驟3.3 –運(yùn)行環(huán)境
此時(shí),Keycloak服務(wù)器已在主機(jī)上啟動(dòng)并運(yùn)行,并且已為jBPM應(yīng)用程序服務(wù)器安裝并配置了KC適配器。 您可以使用以下命令運(yùn)行該應(yīng)用程序:
$JBPM_HOME/bin/standalone.sh -c standalone-full.xml服務(wù)器啟動(dòng)后,您可以導(dǎo)航到該應(yīng)用程序: http:// localhost:8080 / kie-wb-6.4.0.Final
jBPM和SSO –登錄頁面
使用Keycloak的管理員用戶憑據(jù)登錄: admin / password
通過Keycloak保護(hù)工作臺(tái)遠(yuǎn)程服務(wù)
jBPM和Drools工作臺(tái)都提供了不同的遠(yuǎn)程服務(wù)端點(diǎn),第三方客戶端可以使用遠(yuǎn)程API來使用這些端點(diǎn)。
為了通過Keycloak驗(yàn)證這些服務(wù),必須禁用BasicAuthSecurityFilter ,對(duì)jBPM的WAR文件中的WEB-INF / web.xml文件(應(yīng)用程序部署描述符)進(jìn)行那些修改:
重要說明 :使用遠(yuǎn)程服務(wù)的用戶必須是角色rest-all的成員。 如第2步所述,此示例中的admin用戶已經(jīng)是rest-all角色的成員。
執(zhí)行服務(wù)器
KIE Execution Server提供的REST API比任何第三方客戶端都可以使用。 本節(jié)介紹如何將KIE Execution Server與Keycloak SSO集成在一起,以便將第三方客戶端身份管理委派給SSO服務(wù)器。
考慮到以上環(huán)境正在運(yùn)行,因此請(qǐng)考慮具有以下條件:
- 在http:// localhost:8180 / auth上運(yùn)行并偵聽的Keycloak服務(wù)器
- 一個(gè)名為demo的領(lǐng)域,其jBPM Workbench的客戶端名為kie
- 在http:// localhost:8080 / kie-wb-6.4.0-Final運(yùn)行的jBPM工作臺(tái)
請(qǐng)按照以下步驟將執(zhí)行服務(wù)器添加到此環(huán)境中:
- 在Keycloak上為執(zhí)行服務(wù)器創(chuàng)建客戶端
- 安裝安裝程序和執(zhí)行服務(wù)器(帶有KC客戶端適配器)
步驟1 –在Keycloak上為執(zhí)行服務(wù)器創(chuàng)建客戶端
根據(jù)要部署的每個(gè)執(zhí)行服務(wù)器,您必須在Keycloak的演示領(lǐng)域中創(chuàng)建一個(gè)新客戶端。
在此示例中,先前步驟中已經(jīng)創(chuàng)建的admin用戶是用于客戶端請(qǐng)求的管理員用戶。 因此,請(qǐng)確保管理員用戶是角色kie-server的成員,以便使用執(zhí)行服務(wù)器的遠(yuǎn)程服務(wù)。 如果角色不存在,請(qǐng)創(chuàng)建它。
注意:此示例認(rèn)為執(zhí)行服務(wù)器將配置為使用200端口偏移量運(yùn)行,因此HTTP端口將在localhost:8280可用
步驟2 –安裝和設(shè)置KC客戶端適配器和執(zhí)行服務(wù)器
此時(shí),一個(gè)名為kie-execution-server的客戶端已準(zhǔn)備就緒,可以在KC服務(wù)器上從執(zhí)行服務(wù)器上使用。 讓我們安裝,設(shè)置和部署執(zhí)行服務(wù)器:
如果與本示例不同,請(qǐng)考慮您的具體環(huán)境設(shè)置:
- 安全部署名稱->使用正在部署的執(zhí)行服務(wù)器war文件的名稱
- 公鑰->使用演示領(lǐng)域公鑰或?qū)⑵浔A魹榭瞻?#xff0c;如果是這樣,服務(wù)器將提供一個(gè)
- 資源->這次,而不是WB配置中使用的kie客戶端,請(qǐng)使用kie-execution-server客戶端
- 啟用基本身份驗(yàn)證->由您決定。 您可以為第三方服務(wù)使用者啟用基本身份驗(yàn)證
- 憑據(jù)->將密鑰用于kie-execution-server客戶端。 您可以在KC管理控制臺(tái)的“ 憑據(jù)”標(biāo)簽中找到它。
步驟3 –部署和運(yùn)行執(zhí)行服務(wù)器
只需使用任何可用機(jī)制在Wildfly中部署執(zhí)行服務(wù)器即可。
使用以下命令運(yùn)行執(zhí)行服務(wù)器:
$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重要說明 :將使用執(zhí)行服務(wù)器遠(yuǎn)程服務(wù)端點(diǎn)的用戶必須具有分配的角色kie-server。 因此,在KC管理控制臺(tái)中為將使用執(zhí)行服務(wù)器遠(yuǎn)程服務(wù)的用戶創(chuàng)建并分配此角色。
一旦啟動(dòng),您可以將服務(wù)器狀態(tài)檢查為(針對(duì)該請(qǐng)求考慮使用基本身份驗(yàn)證,請(qǐng)參閱下一個(gè)使用遠(yuǎn)程服務(wù)以獲取更多信息):
curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/消費(fèi)遠(yuǎn)程服務(wù)
為了使用工作臺(tái)或執(zhí)行服務(wù)器提供的不同遠(yuǎn)程服務(wù),您的客戶端必須在KC服務(wù)器上進(jìn)行身份驗(yàn)證,并且必須具有有效的令牌才能執(zhí)行請(qǐng)求。
注意 :請(qǐng)記住,為了使用遠(yuǎn)程服務(wù),經(jīng)過身份驗(yàn)證的用戶必須已分配:
- 使用WB遠(yuǎn)程服務(wù)的所有角色
- 使用Execution Server遠(yuǎn)程服務(wù)的角色kie-server
請(qǐng)確保已創(chuàng)建必要的角色并將其分配給將在Keycloak管理控制臺(tái)上使用遠(yuǎn)程服務(wù)的用戶。
您有兩個(gè)選擇可以使用不同的刪除服務(wù)端點(diǎn):
- 如果應(yīng)用程序的客戶端支持基本身份驗(yàn)證,則使用它
- 使用基于承載(令牌)的身份驗(yàn)證
使用基本身份驗(yàn)證
如果KC客戶端適配器配置啟用了基本身份驗(yàn)證(如本指南中針對(duì)WB( 步驟3.2 )和Execution Server所建議的那樣),則可以避免令牌授予/刷新調(diào)用,而只需調(diào)用服務(wù)即可,如以下示例所示。
WB遠(yuǎn)程存儲(chǔ)庫端點(diǎn)的示例:
curl http://admin:password@localhost:8080/kie-wb-6.4.0.Final/rest/repositories檢查執(zhí)行服務(wù)器狀態(tài)的示例:
curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/使用基于令牌的身份驗(yàn)證
第一步是在Keycloak上創(chuàng)建一個(gè)新客戶端,該客戶端允許第三方遠(yuǎn)程服務(wù)客戶端獲取令牌。 可以通過以下方式完成:
- 轉(zhuǎn)到KC管理控制臺(tái),然后使用以下配置創(chuàng)建新客戶端 :
- 客戶編號(hào): kie-remote
- 當(dāng)我們將要手動(dòng)獲取令牌并調(diào)用服務(wù)時(shí),讓我們稍微延長令牌的壽命。 在生產(chǎn)訪問令牌中,令牌應(yīng)具有相對(duì)較低的超時(shí),最好少于5分鐘:
- 轉(zhuǎn)到KC管理控制臺(tái)
創(chuàng)建用于遠(yuǎn)程客戶端的公共客戶端后,您現(xiàn)在可以通過對(duì)KC服務(wù)器的令牌端點(diǎn)執(zhí)行HTTP請(qǐng)求來獲取令牌。 這是命令行示例:
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'`此時(shí),如果您回顯$ TOKEN ,它將輸出從KC服務(wù)器獲得的令牌字符串,該令牌字符串現(xiàn)在可用于授權(quán)對(duì)遠(yuǎn)程端點(diǎn)的進(jìn)一步調(diào)用。 例如,如果要檢查內(nèi)部jBPM存儲(chǔ)庫:
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
總結(jié)
以上是生活随笔為你收集整理的sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲜怎么组词 鲜字怎么组词
- 下一篇: 壳可以组什么词 壳如何组词