具有多个值的Keycloak AttributeToRoleMapper

时间:2018-10-31 09:26:37

标签: keycloak

我的项目有一个具有多个角色的SAML身份提供程序,我们希望将其映射到Keycloak服务器中的单个角色。

不幸的是,isAttributePresent方法期望在SAML响应中仅映射和检查一个IdP角色。

如果为映射到单个角色的每个IdP角色创建一个映射器,则第二次登录后登录流程将失败,因为映射器是一一评估的,如果最后一个要评估的映射器失败,则该角色将被删除。

映射器:

  • mapper1-IdpRole1-> KC_ROLE
  • mapper2-IdpRole2-> KC_ROLE

用户:

  • user1-具有IdpRole1,IdpRole2
  • user2-具有IdpRole1
  • user3-具有IdpRole2

user1:

  • 首次登录:

    • importNewUser为mapper1调用,KC_ROLE已关联

    • importNewUser被mapper2调用,KC_ROLE被关联

  • 第二次登录:
    • 为mapper1调用updateBrokeredUser,已关联KC_ROLE
    • 为mapper2调用updateBrokeredUser,已关联KC_ROLE

user2:

  • 首次登录:
    • importnewUser为mapper1调用,KC_ROLE已关联
    • importnewUser被mapper2调用,KC_ROLE被关联
  • 第二次登录:
    • 为mapper1调用updateBrokeredUser,已关联KC_ROLE
    • 为mapper2调用updateBrokeredUser,删除了KC_ROLE

user3:

  • 首次登录:
    • importnewUser为mapper1调用,KC_ROLE已关联
    • importnewUser被mapper2调用,KC_ROLE被关联
  • 第二次登录:
    • 为mapper1调用updateBrokeredUser,删除了KC_ROLE
    • 为mapper2调用
    • updateBrokeredUser,已关联KC_ROLE

因此,用户1和用户3将具有该角色,而用户2将没有角色。

有没有解决方法?有支持多值的计划吗?

1 个答案:

答案 0 :(得分:0)

作为一种可能的解决方法,您将必须一个一个地映射角色,然后为应用程序配置所有需要授予的角色。

或者,您可以选择创建自己的映射器,该映射器可以具有多个值(但这是扩展/集成主题)。

另一种可能的解决方法是在身份提供者联合会使用的中间/外部SAML IdP级别执行映射和合并属性,以便Keycloak实例仅获得一个属性以映射到keycloak中的领域角色。