个人备案门户网站,一站式装修的利弊,网页界面模板下载,住小帮装修效果图sso集成shiro介绍 单一登录#xff08;SSO#xff09;和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案#xff0c;尤其是在迁移到云中时。 本文讨论了Keycloak与jBPM或Drools应用程序的集成#xff0c;以便使用Keycloak上提供的所有功能。 Keycloak… sso集成shiro 介绍 单一登录SSO和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案尤其是在迁移到云中时。 本文讨论了Keycloak与jBPM或Drools应用程序的集成以便使用Keycloak上提供的所有功能。 Keycloak是用于浏览器应用程序和RESTful Web服务的集成SSO和IDM。 在Keycloak的主页上进一步了解它。 与Keycloak集成的结果具有许多优势例如 为包括jBPM和Drools工作台在内的不同客户提供集成的SSO和IDM环境 社交登录–使用您的FacebookGoogleLinkedin等帐户 用户会话管理 以及更多… 下一节将介绍Keycloak的以下集成点 通过Keycloak服务器进行工作台身份验证 它基本上包括通过Keycloak SSO保护Web客户端和远程服务客户端。 因此无论是Web界面还是远程服务使用者无论是用户还是服务都将通过KC进行身份验证。 通过Keycloak服务器执行服务器认证 包括保护执行服务器提供的远程服务因为它不提供Web界面。 任何远程服务使用者无论是用户还是服务都将通过KC进行身份验证。 消费远程服务 本节描述第三方客户端如何使用由Workbench和Execution Server提供的远程服务端点。 情境 将下图视为本文示例的环境 示例场景 Keycloak是一个独立的过程可提供远程身份验证授权和管理服务这些服务可能会被一个或多个jBPM应用程序通过网络使用。 考虑以下用于构建此环境的主要步骤 安装和设置Keycloak服务器 为此示例创建和设置领域-配置领域的客户端用户和角色 安装和设置SSO客户端适配器和jBPM应用程序 笔记 最终的环境和本文的不同配置均基于jBPMKIE工作台但是相同的环境也可以应用于KIE Drools工作台。 本示例使用最新的6.4.0.CR2社区发行版 步骤1 –安装和设置Keycloak服务器 Keycloak提供了广泛的文档以及有关在不同环境中进行安装的几篇文章。 本节介绍了用于构建示例的集成环境的最小设置。 如果需要更多信息请参考Keycloak文档 。 以下是最小化Keycloak安装和设置的步骤 从下载部分下载最新版本的Keycloak。 本示例基于Keycloak 1.9.0.Final。 将下载的Keycloak发行版解压缩到一个文件夹中我们将其称为$KC_HOME 运行KC服务器–此示例基于在同一主机上同时运行Keycloak和jBPM。 为了避免端口冲突可以将Keycloak服务器的端口偏移量用作 $KC_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset100 创建Keycloak的管理用户–执行以下命令以创建此示例的管理员用户 $KC_HOME/bin/add-user.sh -r master -u admin -p admin Keycloak管理控制台将位于http// localhost8180 / auth / admin 使用admin / admin作为登录凭据。 第2步–创建并设置演示领域 安全领域用于限制对不同应用程序资源的访问。 Keycloak服务器运行之后下一步就是创建领域。 该领域将为jBPM应用程序提供不同的用户角色会话等。 Keycloak提供了几个领域创建和管理的示例 从官方示例到带有更多示例的不同文章。 您可以手动创建领域也可以仅导入给定的json文件。 逐步创建领域 请按照以下步骤操作以创建本文稍后使用的演示领域 转到Keycloak 管理控制台 然后单击“ 添加领域”按钮。 给它命名为demo 。 转到“客户端”部分从管理控制台主菜单然后为演示领域创建一个新客户端 客户编号 kie 客户端协议 openid-connect 访问类型 机密 根URL http// localhost8080 基本网址 /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适配器的步骤 从此处下载适配器 执行以下命令 cd $JBPM_HOME/
unzip keycloak-wf8-adapter-dist.zip // Install the KC client adaptercd $JBPM_HOME/bin
./standalone.sh -c standalone-full.xml // Setup the KC client adapter.// ** Once server is up, open a new command line terminal and run:
cd $JBPM_HOME/bin
./jboss-cli.sh -c --fileadapter-install.cli 步骤3.2 –配置KC适配器 将KC适配器安装到Wildfly中后下一步是配置适配器以指定不同的设置例如身份验证服务器的位置要使用的领域等。 Keycloak提供了两种配置适配器的方法 每个WAR配置 通过Keycloak子系统 在此示例中我们使用第二个选项使用Keycloak子系统因此我们的WAR不受此类设置的影响。 如果要使用per WAR方法请在此处查看 。 编辑配置文件$ JBPM_HOME / standalone / configuration / standalone-full.xml并找到子系统配置部分。 添加以下内容 subsystem xmlnsurn:jboss:domain:keycloak:1.1secure-deployment namekie-wb-6.4.0-Final.warrealmdemo/realmrealm-public-keyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Q3RNbrVBcY7xbpkB2ELjbYvyx2Z5NOM/9gfkOkBLqk0mWYoOIgyBj4ixmG/eu/NL2sja6nzC4VP4G3BzpefelGduUGxRMbPzdXfm6eSIKsUx3sSFl1P1L5mIk34vHHwWYROUZddtAB5VpMZlwpr3hOlfxJgkMg5/8036uebbn4hJPpvtn8ilVAzrCWqyaIUbaEH7cPe3ecou0ATIF02svz8oHIVQESLr2zPwbKCebAXmY2p2t5MUv3rFE5jjFkBaY25u4LiS2/AiScpilJDBNIr/ZIwpk6ksivBIwyfZbTtUN6UjPRXe6SS/c1LaQYyUrYDlDpdnNt6RboQIDAQAB/realm-public-keyauth-server-urlhttp://localhost:8180/auth/auth-server-urlssl-requiredexternal/ssl-requiredresourcekie/resourceenable-basic-authtrue/enable-basic-authcredential namesecret925f9190-a7c1-4cfd-8a3c-004f9c73dae6/credentialprincipal-attributepreferred_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// localhost8080 / kie-wb-6.4.0.Final jBPM和SSO –登录页面 使用Keycloak的管理员用户凭据登录 admin / password 通过Keycloak保护工作台远程服务 jBPM和Drools工作台都提供了不同的远程服务端点第三方客户端可以使用远程API来使用这些端点。 为了通过Keycloak验证这些服务必须禁用BasicAuthSecurityFilter 对jBPM的WAR文件中的WEB-INF / web.xml文件应用程序部署描述符进行那些修改 卸下过滤器 filter
filter-nameHTTP Basic Auth Filter/filter-namefilter-classorg.uberfire.ext.security.server.BasicAuthSecurityFilter/filter-classinit-paramparam-namerealmName/param-nameparam-valueKIE Workbench Realm/param-value/init-param
/filterfilter-mappingfilter-nameHTTP Basic Auth Filter/filter-nameurl-pattern/rest/*/url-patternurl-pattern/maven2/*/url-patternurl-pattern/ws/*/url-pattern
/filter-mapping 将远程服务网址格式限制为 security-constraintweb-resource-collectionweb-resource-nameremote-services/web-resource-nameurl-pattern/rest/*/url-patternurl-pattern/maven2/*/url-patternurl-pattern/ws/*/url-pattern/web-resource-collectionauth-constraintrole-namerest-all/role-name/auth-constraint
/security-constraint 重要说明 使用远程服务的用户必须是角色rest-all的成员。 如第2步所述此示例中的admin用户已经是rest-all角色的成员。 执行服务器 KIE Execution Server提供的REST API比任何第三方客户端都可以使用。 本节介绍如何将KIE Execution Server与Keycloak SSO集成在一起以便将第三方客户端身份管理委派给SSO服务器。 考虑到以上环境正在运行因此请考虑具有以下条件 在http// localhost8180 / auth上运行并侦听的Keycloak服务器 一个名为demo的领域其jBPM Workbench的客户端名为kie 在http// localhost8080 / kie-wb-6.4.0-Final运行的jBPM工作台 请按照以下步骤将执行服务器添加到此环境中 在Keycloak上为执行服务器创建客户端 安装安装程序和执行服务器带有KC客户端适配器 步骤1 –在Keycloak上为执行服务器创建客户端 根据要部署的每个执行服务器您必须在Keycloak的演示领域中创建一个新客户端。 转到KC管理控制台 -客户端-新客户端 名称 kie-execution-server 根URLhttp// localhost8280 / 客户端协议openid-connect 访问类型机密如果需要则为公开但不建议公开 有效的重定向URI/kie-server-6.4.0.Final/* 基本网址/kie-server-6.4.0.Final 在此示例中先前步骤中已经创建的admin用户是用于客户端请求的管理员用户。 因此请确保管理员用户是角色kie-server的成员以便使用执行服务器的远程服务。 如果角色不存在请创建它。 注意此示例认为执行服务器将配置为使用200端口偏移量运行因此HTTP端口将在localhost8280可用 步骤2 –安装和设置KC客户端适配器和执行服务器 此时一个名为kie-execution-server的客户端已准备就绪可以在KC服务器上从执行服务器上使用。 让我们安装设置和部署执行服务器 安装另一个Wildfly服务器以用于执行服务器和KC客户端适配器。 您可以按照上面有关工作台的说明进行操作也可以遵循官方的适配器文档 。 从Wildfly服务器的配置路径中编辑standalone-full.xml文件并将KC子系统适配器配置为 secure-deployment namekie-server-6.4.0.Final.warrealmdemo/realmrealm-public-keyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMon6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB/realm-public-keyauth-server-urlhttp://localhost:8180/auth/auth-server-urlssl-requiredexternal/ssl-requiredresourcekie-execution-server/resourceenable-basic-authtrue/enable-basic-authcredential namesecrete92ec68d-6177-4239-be05-28ef2f3460ff/credentialprincipal-attributepreferred_username/principal-attribute
/secure-deployment 如果与本示例不同请考虑您的具体环境设置 安全部署名称-使用正在部署的执行服务器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-offset200 -Dorg.kie.server.idID -Dorg.kie.server.userUSER -Dorg.kie.server.pwdPWD -Dorg.kie.server.locationLOCATION_URL -Dorg.kie.server.controllerCONTROLLER_URL -Dorg.kie.server.controller.userCONTROLLER_USER -Dorg.kie.server.controller.pwdCONTOLLER_PASSWORD 例 $EXEC_SERVER_HOME/bin/standalone.sh -c standalone-full.xml -Djboss.socket.binding.port-offset200 -Dorg.kie.server.idkieserver1 -Dorg.kie.server.useradmin -Dorg.kie.server.pwdpassword -Dorg.kie.server.locationhttp://localhost:8280/kie-server-6.4.0.Final/services/rest/server -Dorg.kie.server.controllerhttp://localhost:8080/kie-wb-6.4.0.Final/rest/controller -Dorg.kie.server.controller.useradmin -Dorg.kie.server.controller.pwdpassword 重要说明 将使用执行服务器远程服务端点的用户必须具有分配的角色kie-server。 因此在KC管理控制台中为将使用执行服务器远程服务的用户创建并分配此角色。 一旦启动您可以将服务器状态检查为针对该请求考虑使用基本身份验证请参阅下一个使用远程服务以获取更多信息 curl http://admin:passwordlocalhost: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:passwordlocalhost:8080/kie-wb-6.4.0.Final/rest/repositories 检查执行服务器状态的示例 curl http://admin:passwordlocalhost:8280/kie-server-6.4.0.Final/services/rest/server/ 使用基于令牌的身份验证 第一步是在Keycloak上创建一个新客户端该客户端允许第三方远程服务客户端获取令牌。 可以通过以下方式完成 转到KC管理控制台然后使用以下配置创建新客户端 客户编号 kie-remote 当我们将要手动获取令牌并调用服务时让我们稍微延长令牌的寿命。 在生产访问令牌中令牌应具有相对较低的超时最好少于5分钟 转到KC管理控制台 创建用于远程客户端的公共客户端后您现在可以通过对KC服务器的令牌端点执行HTTP请求来获取令牌。 这是命令行示例 RESULTcurl --data grant_typepasswordclient_idkie-remoteusernameadminpasswordpasswordthe_client_secret http://localhost:8180/auth/realms/demo/protocol/openid-connect/tokenTOKENecho $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.htmlsso集成shiro