【问题标题】:Only in Token URL endpoint, the Client ID and Client Secret are being sent as request parameters in Keycloak仅在 Token URL 端点中,Client ID 和 Client Secret 作为请求参数在 Keycloak 中发送
【发布时间】:2022-11-22 02:46:12
【问题描述】:

在我的应用程序中,我将 keycloak 与我在 Spring Boot 应用程序中创建的授权服务器一起使用。我已经使用 OpenID Connect 实现了身份验证和授权。在 keycloak 的客户端身份验证参数中,我选择了 client_secret_post 选项。配置如下图所示:

在我用spring boot开发的Authorization server中,我也做了同样的事情。

现在,当我调试代码时,我可以看到通过令牌请求 http://auth-server:9000/oauth2/token,客户端 ID 和客户端密码在请求参数中发送,如下图所示

但是对于 userinfo 请求 http://auth-server:9000/userinfo,我看到客户端 id 和客户端密码没有在请求参数中发送,而是客户端 id 和客户端密码被解码并在授权标头中发送见下图

这是预期的行为还是我遗漏了什么?为什么 client_id 和 client_secret 也没有作为 userinfo 端点 URL http://auth-server:9000/userinfo 的请求参数发送?

【问题讨论】:

    标签: spring-boot keycloak openid-connect


    【解决方案1】:

    Keycloak 是一个授权服务器。不要创建另一个。

    您的 Spring 应用程序应配置为:

    • REST API 的资源服务器。教程there
    • UI 客户端(服务于 Thymeleaf 页面的 Spring 应用程序,以及使用 Angular、React、Vue 等编写的本机移动应用程序和富客户端)。为此使用 OIDC 客户端库。 spring-boot-starter-oauth2-client 用于 Spring 客户端(如 Thymeleaf 客户端),angular-auth-oidc-client 用于 Angular 等。

    【讨论】:

    • 是的,我们有微服务,其中我们有休息 API,它们充当资源服务器。当我们访问资源服务器 API 时,它们会验证令牌。我们在 keycloak 中配置了一个 OpenID Connect 身份提供者。这个 OpenID Connect 身份提供者指向授权服务器。顺便说一句,我没有创建这个架构。这个架构是由另一家公司创建的,我正在尝试将他们的服务与我的应用程序集成。
    • 集成单独的 OpenID Connect 身份提供者的原因是我们的授权服务器在另一个服务中执行一些策略。执行这些策略时,会获取一些用户凭据,从中提取我们用于身份验证和授权目的的用户详细信息。我们没有在 keycloak 中硬编码用户名和密码。
    【解决方案2】:

    哦,我想通了。当触发用户信息 URL 端点 http://auth-server:9000/userinfo 时,在授权标头中实际发送了从令牌端点 http://auth-server:9000/oauth2/token 检索到的令牌。所以这是我猜的预期行为。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2022-07-27
      • 2020-02-18
      • 2013-02-25
      • 2015-12-29
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多