Tom*_*sen 7 java openid-connect keycloak idp
我正在开发一个项目,需要创建一个应用程序,该应用程序充当仅支持 OIDC 身份验证的客户端和 REST api 之间的 OIDC 中介。REST api 能够生成令牌并提供用户信息,但不支持 OIDC。
为了实现这一点,我正在考虑使用 keycloak 来处理与客户端的 OIDC 通信,并实现我自己的 java 应用程序,keycloak 可以触发该应用程序来实现授权、令牌和用户信息端点(某种自定义的自己制作的身份提供程序)处理与客户端的通信休息 API。
我在 keycloak 中创建了一个领域,并将该领域配置为使用身份提供程序重定向器和我在 keycloak 中添加的身份提供程序(用户定义的 OpenID Connect v1.0)。在身份提供程序配置中,我已将所有 URL 设置为指向我的 java 应用程序,但来自客户端的初始 OIDC 授权调用仅使用 #error=login_required 重定向到redirect_uri,而没有触发 java 应用程序中的任何端点。
我想我错过了一些东西..我需要干预授权流程,以便我可以从需要在我的java应用程序中处理的授权请求中获取查询参数。我还需要将其余 api 中的令牌映射到令牌请求中(当此请求来自客户端应用程序的后端时),最后将 userinfo 对象映射为对 userinfo 请求的响应。
我真的希望有人有时间为我指明正确的方向。预先非常感谢您。
我需要拦截授权请求调用以获取标识用户的自定义查询参数(endUserString)。将不会有用户登录表单。我的代码中需要使用此参数来实现 REST API。令牌和用户信息都必须从我的应用程序接收,而不是从 keycloak 本身接收。
Java Mediator 可能会提前请求令牌 (A) 并使用它来访问 Rest API(使用预定义的 clientId 和 clientsecret)。或者,可以为每个方法获取该令牌。必须使用 To 令牌从 REST API (B) 检索客户信息。我想用 OIDC 支持来包装它,而不需要任何登录表单。浏览器将仅使用标识最终用户的 endUserString 重定向到授权流程。客户信息将从 java 中介器返回到 keycloak 中,在 GetUserInfoRsp 中响应此信息。
我认为可能有比您想象的更简单的解决方案:为 Keycloak实现您自己的自定义身份验证器。
Keycloak 有一个身份验证流程的概念,它是一个由 Keycloak 提供或定制的身份验证器树。可以调用每个验证器来尝试验证用户的身份。
最常见的是用户名/密码表单,它向用户显示登录页面,并在提供的凭据有效时对用户进行身份验证。但您可以想象任何类型的身份验证器,例如SMS 身份验证器或魔术链接身份验证器。
您可以在其存储库中找到现有的 Keycloak 身份验证器,以及如何在此处创建自己的身份验证器的文档。
在您的情况下,您需要实现自己的逻辑,其中身份验证器将从endUserString请求中获取参数并调用 REST API 来验证用户的身份。您可以在初始化时或针对每个请求获取 REST API 令牌。您还可以使用来自 REST API 的用户信息端点(常见 OIDC 属性或自定义属性)的数据修改 Keycloak 中存储的用户。
请注意,开发团队宣布了Keycloak X,这是该项目的一种重启,可能会给他们的 API 带来重大变化。
另外,请考虑您的设计的所有安全影响,因为从您提供的内容来看,用户的身份验证似乎仅依赖于一个简单的查询参数,例如,如果它不随时间变化,感觉就像一个很大的问题安全漏洞。
| 归档时间: |
|
| 查看次数: |
14921 次 |
| 最近记录: |