oauth-2.0 - 如何将“帐户”的概念添加到 Keycloak?
问题描述
如何最好地配置Keycloak,以便用户需要拥有一个客户端才能登录该客户端?
我必须更换专有的 SSO-Impl。它像 Keycloak 一样处理用户、角色和客户。但是,它也知道帐户。只有拥有该客户的帐户的用户才被允许登录该客户。
在 Keycloak 中,如果用户只是存在于领域中,他可以登录到该领域的客户端。不需要其他任何东西。所以不需要“帐户”。在旧应用程序中,他还需要一个帐户。 Keycloak 中的哪些功能最适合克服这种差异?
我有一个想法:
在每个客户端名称和“HasAccount”中创建一个客户端角色并将其分配给用户。然后,如果缺少该角色,则限制访问。这在这里讨论:“使用 keycloak 限制单个领域中的客户端访问”它至少有两个缺点:
- 它在旧版应用程序中混合了身份验证和授权。我可以理解。但是创建角色已经是一种解决方法。这就是为什么我在这里描述了我最初的问题。
- 我有超过 3 种语言/技术的客户。在那里添加功能似乎比在 Keycloak 中更多。
最后一句话:
在您再问“这不是单点登录”之前。它仅用于管理目的。管理员可以通过创建或不创建帐户来允许用户登录或不登录客户端。用户不必再次登录。如果他登录 App A 并拥有 App B 的帐户,则无需登录即可访问 App B。
解决方案
A user is only allowed to login to a client if he has an account for that client.
确实不是身份提供者 (IdP) 的任务。它只提供身份而不提供授权。
当然,您也可以忽略这一点并实施授权。请参阅:Keycloak 的基于用户属性的 Web 服务访问控制
从设计的角度来看,我会在遗留应用程序前面添加身份验证反向代理(但这不是 SPA 应用程序的最佳解决方案)。身份验证代理将通过 OIDC 协议提供身份验证以及授权。旧版应用程序可能会保留自己的 OIDC 身份验证 - 从用户的角度来看,这将是无缝身份验证,因为将使用 SSO。
Account
entity - 您可以group
在 Keycloak 中使用 entity 而不是 original account
。
推荐阅读
- java - 在数组中获取重复数字时出现错误
- php - Laravel 迁移 (errno: 150 “外键约束格式不正确”)
- c++ - 获取引用参数的共享指针
- systemd - i3-nagbar 未从 systemd 服务执行(已设置显示和 xauthority)
- javascript - 错误,当使用 rehype-react 渲染 htmlAST
- css - 如何在颤振/飞镖中使用具有设定大小的自定义字体?
- php - 在用户之间共享文件
- visual-studio - LINQ to sql 类 LINQ to sql 对象?
- c++ - 在 Qt 中没有执行添加 SQL 代码
- c - Valgrind 说 - 大小为 8 的无效写入