Keycloak:如何通过角色筛选特定OIDC客户端的用户?

时间:2020-08-16 12:21:39

标签: keycloak openid-connect

我们在一个领域中配置了许多用户和多个OIDC客户端。我们想将另一个应用程序(OIDC客户端)连接到该领域。不幸的是,客户端无法检查是否存在任何属性或角色。

如何将Keycloak配置为使用特定的OIDC客户端进行身份验证,但是如果用户没有特定的角色,则返回失败的身份验证?

2 个答案:

答案 0 :(得分:1)

通常这种类型的选项不起作用,因为授权重定向发生在您知道用户是谁之前,因此在您知道涉及哪个角色之前。

我会做什么

进行授权重定向只能执行以下工作:

  • 登录用户并返回用户ID(子声明)以及可能的几个作用域

然后在您的应用程序中管理角色-第二个应用程序应调用执行此操作的Web API:

  • 从访问令牌以及其他来源获取声明,然后将其用于标识和授权

如果用户通过身份验证但无权使用特定应用,请通过API调用进行检测,然后在登录后在应用中显示“拒绝访问”页面。

答案 1 :(得分:0)

要实现此目的,您应该实现Keycloak的AuthenticatorFactory和Authenticator接口。查看here了解更多信息。 在authenticate()方法中,您将编写与此类似的内容:

If(client == yourClient){
// Check for roles
}

否则,发生故障时的预期行为。