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

Keycloak KeyClope:如何按角色筛选特定OIDC客户端的用户?,keycloak,openid-connect,Keycloak,Openid Connect,我们有一个领域,配置了多个用户和多个OIDC客户端。我们希望将另一个应用程序(OIDC客户端)连接到该领域。不幸的是,客户端无法检查是否存在任何属性或角色 如何配置keydepot,使其与特定的OIDC客户端进行身份验证,但如果用户没有特定的角色,则返回失败的身份验证?要实现这一点,您应该实现keydepot的AuthenticatorFactory和Authenticator接口。寻找更多信息。 在authenticate()方法中,您将编写类似以下内容: If(client == yourC

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


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

要实现这一点,您应该实现keydepot的AuthenticatorFactory和Authenticator接口。寻找更多信息。 在authenticate()方法中,您将编写类似以下内容:

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

否则,出现故障时的预期行为。

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

我会做什么

使授权重定向仅执行以下作业:

  • 登录用户并返回用户id(子声明),可能还有几个作用域
然后管理应用程序中的角色-第二个应用程序应调用Web API来执行以下操作:

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

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

感谢您的回答。难道没有一种方法可以使它可配置吗?我不想在java代码中执行任何硬编码规则。我不明白您的意思,请给我一个硬编码规则的示例?我希望用户可以在Key斗篷中获得身份验证,但如果缺少特定角色,Key斗篷可能仍然返回not authenticated。但是,看起来我需要搜索另一个能够评估角色的客户端。这将是身份验证和授权的混合-授权服务器给您的是身份验证证明+授权所需的数据。授权的实际执行需要在您自己的代码中完成。