如何通过AWS Cognito实现JBPM用户认证及SSO集成?
JBPM 与 AWS Cognito 认证集成方案
一、直接跳转Cognito登录页的集成思路
- 禁用JBPM自带登录UI,修改JBPM认证入口配置,将登录请求重定向至AWS Cognito授权页面
- 需在Cognito用户池的应用客户端中,配置JBPM回调地址(如
https://your-jbpm-url/auth/callback)为允许的redirect_uri
- 需在Cognito用户池的应用客户端中,配置JBPM回调地址(如
- 认证成功回调处理:
- Cognito携带授权码跳转到JBPM回调接口,JBPM后端调用Cognito Token端点(
https://<your-cognito-domain>/oauth2/token)交换ID Token和Access Token - 用Cognito提供的公钥验证Token签名,解析用户信息后创建JBPM本地会话,完成登录
- Cognito携带授权码跳转到JBPM回调接口,JBPM后端调用Cognito Token端点(
- 注销同步逻辑:
- JBPM注销时,先调用Cognito注销端点(
https://<your-cognito-domain>/logout?client_id=<your-client-id>&logout_uri=https://your-jbpm-url/login) - 清除JBPM本地会话后,跳转回JBPM登录页
- JBPM注销时,先调用Cognito注销端点(
二、借助Keycloak中间层实现集成(复用JBPM原生SSO能力)
由于JBPM原生支持Keycloak SSO,可通过Keycloak作为身份代理对接Cognito,无需大幅修改JBPM代码:
- Keycloak配置Cognito作为身份提供者
- 在Keycloak后台添加
OpenID Connect类型的身份提供者 - 配置Cognito端点信息:
- 授权端点:
https://<your-cognito-domain>/oauth2/authorize - Token端点:
https://<your-cognito-domain>/oauth2/token - 用户信息端点:
https://<your-cognito-domain>/oauth2/userInfo
- 授权端点:
- 从
https://cognito-idp.<region>.amazonaws.com/<user-pool-id>/.well-known/jwks.json获取公钥并导入,用于Token验证 - 配置Cognito应用客户端ID和密钥,授权范围设为
openid email profile
- 在Keycloak后台添加
- JBPM对接Keycloak SSO
- 修改JBPM的
standalone.xml配置Keycloak参数,示例片段:<subsystem xmlns="urn:jboss:domain:keycloak:1.1"> <secure-deployment name="business-central.war"> <realm>your-keycloak-realm</realm> <resource>jbpm-business-central</resource> <auth-server-url>http://your-keycloak-instance/auth</auth-server-url> <ssl-required>external</ssl-required> <use-resource-role-mappings>true</use-resource-role-mappings> </secure-deployment> <secure-deployment name="kie-server.war"> <realm>your-keycloak-realm</realm> <resource>jbpm-kie-server</resource> <auth-server-url>http://your-keycloak-instance/auth</auth-server-url> <ssl-required>external</ssl-required> <use-resource-role-mappings>true</use-resource-role-mappings> </secure-deployment> </subsystem> - 配置JBPM登录入口指向Keycloak,Keycloak会自动跳转至Cognito登录页
- 修改JBPM的
- 注销同步配置
- 在Keycloak身份提供者设置中开启同步注销,配置Cognito注销端点作为回调
- 确保JBPM注销时触发Keycloak注销流程,进而同步退出Cognito
三、关键注意事项
- 确保Cognito、Keycloak、JBPM的域名和端口在同一域,或已配置CORS允许跨域请求
- 权限映射:将Cognito用户角色映射到JBPM对应角色,可通过Keycloak角色映射功能或JBPM用户组配置实现
- Token有效期:根据业务需求调整Cognito和Keycloak的Token过期时间,避免频繁重新认证
内容的提问来源于stack exchange,提问作者Yogesh Sharma
相关产品推荐
相关产品推荐

