在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
自己(可能不完整!)实现,因为到目前为止我还没有找到创建org.keycloak.models.cache.infinispan.RoleAdapter
实例的方法。>
在管理控制台中,为特定用户动态添加的角色被列为“分配的角色”,而不是“有效角色”,这也许已经是一个问题。
当我通过OIDC REST端点/realms/{realm-name}/protocol/openid-connect/token
向用户请求访问令牌时,所有角色都包含在realm_access角色中。
但是,当我使用WildFly适配器登录到使用KEYCLOAK身份验证方法保护已部署到WildFly的Web应用程序,并查看从Servlet会话中的RefreshableKeycloakSecurityContext
获得的令牌时,动态添加的角色不包含在访问令牌中。
我可能会缺少什么?