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

使用SCIM账户管理器作为声明提供者时如何访问Curity SCIM属性

Curity SCIM账户管理器与声明提供者配置问题解答

问题背景

我们使用Curity Community 8.4.1版本,采用SCIM作为账户管理器并搭配默认数据源,配置最初创建于2021年的Curity 6.x版本,后续经多次升级保留并扩展。

当创建新声明并选择account-manager-claim-provider作为声明提供者时,遇到以下异常现象:

  • 属性下拉列表显示多数SCIM 2.0字段,但选择userName等多数字段时,声明测试返回空对象(数据库accounts表存在含对应字段的用户数据,且测试无警告)
  • email字段可正常工作,但它并非来自accounts表的attributes列
  • userName(或username)字段无法工作,尽管它也不在attributes列中
  • 未做转换的情况下配置name字段可正常工作,但不清楚其值来源(该属性是attributes列中的对象,不在accounts表的顶级列)
  • 选中属性中建议的其他SCIM schema字段无法工作
  • 手动输入attributes作为选中属性也无法工作

已修改属性查询语句为:

SELECT accounts.* FROM accounts WHERE accounts.username = :subject

切换为默认数据源作为声明提供者,将attributes配置为选中属性时,可正常获取该字段的JSON内容,并能在转换中解析使用,声明测试显示转换前后数据正常。

目前采用的临时方案是:使用默认数据源,先解析attributes字段,再通过转换将所有声明设置到嵌套对象中,避免为每个基于SCIM属性的声明重复解析JSON,但操作较为繁琐。

问题解答

1. 是否可将Curity SCIM账户管理器用作account-manager-claim-provider?若可以,为转换提供attributes参数的正确方式是什么?

可以使用SCIM账户管理器作为account-manager-claim-provider,但需注意以下配置要点:

  • SCIM账户管理器的声明提供者会自动映射SCIM标准字段到内部用户模型,不会直接暴露数据库的attributes列。若需访问attributes中的自定义字段,必须在SCIM账户管理器配置中显式添加自定义属性映射,将attributes内的JSON字段映射为SCIM扩展属性。
  • 声明配置的选中属性需使用SCIM标准字段名或已配置的扩展属性URN,而非直接写attributes。例如,若将attributes中的customField映射为扩展属性urn:custom:schemas:customField,则声明的选中属性需填写该URN。

针对userName字段失效问题,需检查SCIM账户管理器的用户模型映射规则,确保userName被正确映射到数据库的username列(或对应字段),且声明配置中使用标准SCIM字段名userName(注意大小写)。

2. 若必须使用默认数据源而非账户管理器,是否有办法避免为每个声明解析accounts表attributes列中的JSON内容?

有两种简化方案:

  • 全局转换脚本:在默认数据源的声明提供者中配置全局入站转换脚本,提前解析attributes的JSON内容并合并到声明上下文根对象,后续所有声明可直接引用解析后的字段。示例脚本:
function transform(attributes, context) {
    const parsedAttrs = JSON.parse(attributes.attributes);
    Object.assign(attributes, parsedAttrs);
    return attributes;
}
  • 数据库视图:创建数据库视图将accounts表的attributes列JSON字段展开为独立列。以PostgreSQL为例:
CREATE VIEW accounts_view AS
SELECT 
    id,
    username,
    email,
    (attributes->>'givenName') AS given_name,
    (attributes->>'familyName') AS family_name,
    -- 按需添加其他需要展开的字段
    attributes
FROM accounts;

之后将默认数据源的查询语句改为查询该视图,即可直接在声明配置中选择展开后的字段,无需手动解析JSON。

3. 转换中是否支持ES6?因为使用可选链或Array.prototype.map()会导致配置验证失败,无法提交更新后的配置。

Curity的转换脚本基于Rhino JavaScript引擎,对ES6特性支持有限,可选链?.、箭头函数、部分Array.prototype.map()的高级写法等特性无法直接使用。

替代方案:

  • 用传统条件判断替代可选链,例如将obj?.field改为obj && obj.field
  • 用for循环替代Array.prototype.map(),或使用兼容Rhino的ES5写法实现相同逻辑
  • 若需使用ES6特性,可提前将代码转译为ES5后再粘贴到转换脚本中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:58:13