You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 APIM 4.3.0外部IdP登录后用户角色丢失问题求助

问题场景

我们希望将通过外部IdP登录的用户预置到WSO2 APIM中,为其分配test-role角色,并获取包含该角色关联的test-scope范围的access token。但每次用户登录后,该角色都会消失,无法达成预期目标。

前提条件

  • WSO2 APIM版本4.3.0
  • 使用OIDC授权码流
  • JIT(即时预置)已启用
  • 数据库:H2

操作步骤

  1. 用户通过外部IdP登录
  2. 用户被预置到APIM
  3. 为用户授予test-role角色
  4. 用户下次通过外部IdP登录时,角色消失

已尝试方案

在deployment.toml中添加以下配置未解决问题:

[authentication.framework.extensions]
provisioning_handler = "org.wso2.carbon.identity.application.authentication.framework.handler.provisioning.impl.SystemRolesRetainedProvisionHandler"

添加以下配置后,用户角色仅在表面保留,但获取的access token中不包含test-scope范围:

[idp_role_management]
return_only_mapped_local_roles = true
return_only_mapped_local_roles_unmapped_exclusive = true

解决方案

1. 配置JIT预置保留本地手动添加的角色

修改deployment.toml,使用正确的角色保留处理器,并禁用JIT对已有角色的覆盖:

# 配置保留本地手动添加角色的预置处理器
[authentication.framework.extensions]
provisioning_handler = "org.wso2.carbon.identity.application.authentication.framework.handler.provisioning.impl.LocalRolesRetainedProvisionHandler"

# 禁用JIT预置覆盖已有角色
[identity.jit_provisioning]
enable = true
overwrite_existing_roles = false

说明:LocalRolesRetainedProvisionHandler专门用于保留用户手动添加的本地角色,而SystemRolesRetainedProvisionHandler仅保留系统默认角色(如Internal/everyone),这是之前配置无效的核心原因。

2. 调整IdP角色管理配置,确保本地角色被纳入token生成

修改deployment.toml中的IdP角色管理配置,允许同时返回IdP映射角色和本地手动添加的角色:

[idp_role_management]
return_only_mapped_local_roles = false
# 取消强制仅返回映射角色,确保本地手动添加的test-role被识别

3. 验证角色与scope的关联及应用权限

  • 登录APIM管理控制台,进入角色管理,找到test-role,确认已正确关联test-scope。
  • 检查OIDC客户端应用的配置:确保应用请求的scope列表包含test-scope,或在应用的OAuth2配置中设置默认包含该scope。
  • 确认test-role具备访问test-scope的权限(可在角色权限配置中检查API/scope权限)。

4. 验证效果

  1. 手动为预置用户分配test-role角色。
  2. 用户通过外部IdP重新登录。
  3. 查看用户角色列表,确认test-role未消失。
  4. 获取access token并通过JWT解析工具检查,确认test-scope已包含在token的scope字段中。

内容的提问来源于stack exchange,提问作者yuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:12:37