我在 keycloak 中成功实现了 User storage SPI
。现在我可以从外部 REST 源进行身份验证。现在我想从外部来源获取客户端角色。我收到一个用户实体如下:
{
"id": "78c8ee03-0bf8-422a-91ec-6241624c0683",
"username": "kaushikam",
.....
"roles": [
{
"id": 1,
"name": "heroes"
"client": "heroes-client"
}
]
}
在 keycloak
服务器中,我手动创建了一个名为 heroes-client
的客户端,并在该客户端中添加了客户端角色 heroes
。现在,我想将从外部源接收的客户端角色映射到名为 heroes-client
的客户端中的客户端角色。
我在 getClientRoleMappings
中使用了 UserModel
,如下所示:
override fun getClientRoleMappings(app: ClientModel?): MutableSet<RoleModel> {
logger.info { "Calling getClientRoleMappings" }
val userRoles = this.user?.roles?.filter { it.client == app?.name } ?: emptyList()
val clientRoles = mutableSetOf<RoleModel>()
userRoles.forEach {
if (app != null) {
clientRoles.add(app.getRole(it.name))
}
}
return clientRoles
}
但是上面的代码没有被调用。虽然 getRoleMappings
被调用。有没有办法解决这个问题。
你可以得到我工作的全部源代码here