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

如何配置Artifactory将OAuth用户自动分配至LDAP用户组

可落地方案整理

方案1:修复官方synchronizeLdapGroups.groovy用户插件(适配7.x版本,优先推荐)

官方插件未生效绝大多数是配置遗漏,按以下步骤排查即可:

  • 确认插件文件部署路径正确:Artifactory 7.x 需将groovy文件和对应properties配置文件放在$JFROG_HOME/artifactory/var/etc/artifactory/plugins目录下,给目录和文件授予Artifactory运行用户的可读权限,部署后可调用POST /api/plugins/reload接口重载插件,或直接重启Artifactory实例生效。
  • 修正配置文件参数:打开同目录下的synchronizeLdapGroups.properties,除了配置你已有的AD连接ID、组属性、用户关联属性外,必须添加配置oauth.sso.enabled=true,默认官方插件仅对普通LDAP登录用户生效,开启该参数后才会触发OAuth/OIDC登录用户的组同步逻辑。
  • 确认用户名映射一致:Keycloak OIDC客户端返回的preferred_username字段值,必须和AD里的sAMAccountName字段完全一致,插件会用登录用户名去AD查询所属组,用户名不匹配会导致查询为空、同步失效。
  • 排查错误:如果仍不生效,查看$JFROG_HOME/artifactory/var/log/artifactory-service.log,搜索插件类名即可定位具体报错,比如AD账号查询权限不足、连接超时等。

方案2:自定义用户插件(适配全版本)

自行编写插件时崩溃多是调用接口的方式不对,按以下规则调整即可:

  • 不要在插件内调用公开REST API操作用户组,直接获取Artifactory内部的SecurityService Bean操作,示例代码片段:
import org.artifactory.security.SecurityService

def securityService = ctx.beanForType(SecurityService.class)
// 参数依次为:登录用户名、已存在的LDAP组名、是否为临时关联
securityService.addUserToGroup(username, groupName, false)
  • 绑定事件时过滤登录类型,仅处理OIDC登录用户避免重复同步:
afterLogin { user, authenticationDetails ->
    // 仅处理OAuth类型的登录请求
    if (authenticationDetails.authenticationType == "OAUTH") {
        // 同步逻辑二选一:
        // 1. 从idToken payload里直接解析你已经配置返回的groups字段
        // 2. 复用Artifactory已配置的LDAP连接池查询该用户的memberOf属性
    }
}

方案3:无插件方案(仅适配Artifactory 7.38及以上版本)

你已经配置了Keycloak在userinfo中返回组信息,可以直接用Artifactory原生的OIDC组映射能力:

  • 进入Artifactory的OIDC配置页,找到Groups Claim配置项,填写Keycloak返回组列表的字段名(一般为groups)
  • 关闭Auto create groups开关,Artifactory会自动将登录用户匹配到系统中已存在的同名LDAP组,不会自动创建不存在的组,完全符合你的需求。
  • 注意Keycloak返回的组名需要和Artifactory中已导入的LDAP组名完全一致,大小写也要匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:24:05