小编Tom*_*sen的帖子

创建自定义身份提供商并使用 keycloak 配置它

我正在开发一个项目,需要创建一个应用程序,该应用程序充当仅支持 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 中响应此信息。

java openid-connect keycloak idp

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

idp ×1

java ×1

keycloak ×1

openid-connect ×1