OIDC: 允许忽略未映射的组 (Synology SSO/Active Directory 会发送无法映射的组,如"DOMAIN\Domain Users")
问题或用例: 使用 Synology SSO Server 作为 OIDC 提供商(由 Active Directory 提供支持),则 groups 索赋包含用户的所有 AD 组,格式为 DOMAIN\group,包括内置组 DOMAIN\Domain Users。RustFS 1.0.0 会以 OIDC 策略映射未解析为当前策略 方式拒绝整个登录,只要令牌中的任何组没有与其名称完全匹配的策略(请参阅 #8050,该问题已通过重命名策略来解决)。在 AD 环境中,无法通过创建匹配的策略来解决此问题:每个用户都是 EXAMPLE\Domain Users 的成员,并且创建名为 EXAMPLE\Domain Users 的策略会失败,因为控制台拒绝了包含空格的策略名称。因此,基于组的 OIDC 授权无法与 Synology SSO/Active Directory 一起使用,即使存在相关组的策略(例如 EXAMPLE\rustfs_admins 和 EXAMPLE\rustfs_users,均已正确创建和存储)。 如何重现: 将 Synology SSO Server(DSM 7.2,帐户类型为 Domain/LDAP)配置为 OIDC 提供商,并使用以下设置。创建以用户的某些组命名的策略(例如 EXAMPLE\rustfs_admins)。尝试创建名为 EXAMPLE\Domain Users 的策略会被拒绝(名称中包含空格)。通过 OIDC 登录后,返回 InvalidRequest: OIDC 策略映射未解析为当前策略。 调试日志(已修改):
"message":"oidc claims mapped to policies","result":"claims_policy_mapped","groups_claim":"groups","policy_count":8,"group_count":8,"groups":"[\"EXAMPLE\\\\Domain Users\", \"EXAMPLE\\\\rustfs_admins\", \"EXAMPLE\\\\rustfs_users\", ...]"
"err":"S3Error(Inner { code: InvalidRequest, message: Some(\"OIDC policy mapping did not resolve to current policies\") ... })"环境: RustFS 1.0.0(图像名为 rustfs/rustfs:1.0.0)、Synology SSO Server 在 DSM 7.2 上,帐户类型为 Domain/LDAP(Active Directory)。相关: #8050。 建议的解决方案: 不匹配的组应被忽略,只要至少有一个组与现有策略匹配,登录就可以成功。这可以是默认行为,也可以是如 RUSTFS_IDENTITY_OPENID_IGNORE_UNMAPPED_GROUPS=on 这样的自选选项。 考虑过的替代方案:
一个过滤器,用于映射索赋值,例如 RUSTFS_IDENTITY_OPENID_GROUPS_FILTER(前缀或正则表达式),以便只考虑相关组。
内容来源: rustfs/rustfs