在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
获取的令牌时,动态添加的角色不包含在访问令牌中 .
我能错过什么?