oauth-2.0 - Oauth2_proxy 与 Keycloak : getting "invalid_token" with/userinfo API

标签 oauth-2.0 keycloak oauth2-proxy

我第一次尝试使用 Keycloak,并使用 Keycoak 作为 oauth2_proxy ( https://github.com/oauth2-proxy/oauth2-proxy/blob/v5.1.1/providers/keycloak.go ) 的提供者来通过 LDAP 实现用户身份验证。
我已经按照 Keycloak 中的所有步骤创建了一个领域,创建了客户端、客户端 ID、客户端 secret 等。此外,Keycloak API“/token”也在传递。但是,一旦我在 keycloak 登录屏幕中传递了用户名/密码,我就会在 oauth2_proxy 中收到以下错误:

[2020/05/30 10:15:37] [requests.go:25] 401 GET http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/userinfo {"error":"invalid_token","error_description":"Token verification failed"}

此外,我在启动 oauth2_proxy docker 容器时传递以下参数:
command: -upstream=static://200 -http-address=0.0.0.0:8080 -https-address=0.0.0.0:8443
      -redirect-url="https://portal.acme.com/oauth2/callback"
      -scope='test-scope' -email-domain=* -cookie-domain=* -cookie-secure=false -cookie-secret=skjgfsgfsf23524
      -cookie-samesite="none" -provider=keycloak
      -client-id='abcd-client' -client-secret='c0281257-b600-40b2-beae-68d1f2d72f02'
      --tls-cert-file=/etc/acme.com.pem
      --tls-key-file=/etc/acme.com.key
      -login-url="http://localhost:7575/auth/realms/master/protocol/openid-connect/auth"
      -redeem-url="http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/token"
      -validate-url="http://172.20.0.10:8080/auth/realms/master/protocol/openid-connect/userinfo"

有人可以帮忙看看可能丢失或出错的地方吗?
任何线索或提示都会非常有帮助。

最佳答案

我找到了这个问题的解决方案。这是因为 JWT token 中的颁发者与我在启动此 oauth2_proxy 容器时提供的 URL 不匹配。
为了解决这个问题,需要的是 docker 容器需要与 Keycloak 公开的主机网络和端口进行通信。这需要两件事:

  • 在启动 oauth2_proxy 时,在所有 Keycloak API 中使用“host.docker.internal”作为主机,以便 oauth2_proxy 容器通过主机网络与 Keycloak 通信。
  • 将“host.docker.internal”映射到本地机器/主机中的 127.0.0.1,以便可以访问浏览器重定向。
    在这个小技巧之后,设置就可以工作了。
    谢谢!
  • 关于oauth-2.0 - Oauth2_proxy 与 Keycloak : getting "invalid_token" with/userinfo API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62103152/

    相关文章:

    javascript - IdentityServer3隐式流程不支持javascript

    java - 如何在 keycloak docker 容器中进行数据库备份

    kubernetes - 使用 nginx-ingress 和 keycloak 在 kubernetes 中进行身份验证的正确设计是什么

    azure - 微软!德语! Azure Cloud - 让 oauth2-proxy 工作

    oauth-2.0 - oauth2-proxy userInfo API 返回的数据太少。如何获取更细粒度的用户数据?

    android - 具有 spring boot 后端的 android native 应用程序的 oauth 授权类型

    oauth-2.0 - OAuth 2.0 用于 Google 登录 : Getting Unknown Host Exception

    java - 使用 spring boot 自定义 keycloak 错误页面

    plugins - 如何在 Keycloak 中显示身份提供者配置页面?

    oauth-2.0 - 通过 OAuth 2.0 使用服务帐户调用 v3 Google Calendar API 时出现 403 禁止消息