Example User Storage Provider with EJB and JPA之后,我创建了一个自定义用户存储提供程序 .

UserAdapter#getRoleMappings 中,我返回通过JPA实体检索的角色,如下所示:

@Override
public Set<RoleModel> getRoleMappings() {
    final Set<RoleModel> roles = super.getRoleMappings();
    for (final GroupBean group : groups) {
        roles.add(new RoleAdapter(this, String.valueOf(group.getObjectID()), group.getName()));
    }

    return roles;
}

RoleAdapter 是我自己的(可能是不完整的) RoleModel 的实现,我正在使用,因为到目前为止我还没有找到创建ie org.keycloak.models.cache.infinispan.RoleAdapter 实例的方法 .

在管理控制台中,动态添加的角色列为特定用户的“已分配角色”,但不是“有效角色”,可能已经存在问题 .

当我通过OIDC REST endpoints /realms/{realm-name}/protocol/openid-connect/token 为用户请求访问令牌时,所有角色都包含在realm_access,roles中 .

但是,当我使用WildFly适配器登录部署到使用KEYCLOAK auth方法保护的WildFly的Web应用程序并查看从servlet会话中的 RefreshableKeycloakSecurityContext 获取的令牌时,动态添加的角色不包含在访问令牌中 .

我能错过什么?