【问题标题】:Keycloak in Docker "Failed to turn code into token"Docker中的Keycloak“无法将代码转换为令牌”
【发布时间】:2019-01-11 10:44:56
【问题描述】:

我在 Docker-compose 网络中运行 Keycloak、keycloak 安全代理和一个 ui 应用程序。当我尝试访问该网页时,我得到一个可以使用的登录页面 - 但我没有成功重定向,而是收到以下错误:

> Aug 03, 2018 1:13:24 PM org.keycloak.adapters.OAuthRequestAuthenticator resolveCode
ERROR: failed to turn code into token
java.net.ConnectException: Connection refused (Connection refused)
      at java.net.PlainSocketImpl.socketConnect(Native Method)
      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
      at java.net.Socket.connect(Socket.java:589)

无论我代理哪种应用程序,或者我在 Docker-compose 中运行它或仅作为节点运行它,我都会收到此错误。当我尝试使用 python 适配器而不是安全代理时,它也可能出现。

整个网络运行在一个公司代理之后,这可能是原因吗?

考虑到代码似乎是发送的(见下文),看来 Keycloak 至少可以验证用户。但我对如何解决这个问题感到困惑。有人有什么想法吗?

http://localhost:8080/?state=84736978-afe6-43eb-a554-aedf86717415session_state=8a231709-5ef3-45fd-8e36-103e521ba49ecode=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..4GewkGISgYEXeGPuCxupsA.V939JivWRaNltjnjT4r2CJGT4oj1HEX9iXycJFoAb_qhI4ietRc5Z2wQO6ekF9MOZ0VtMcLAyX0zASY-NPEcf3byX0INP-2zJDSF4TOEXNbMbMnVeKFgmLgQKDseUsl1ieofPVY7df8QVvpTs98VAw2_g2XwTsLemBcpxfalvMRBwViN6PyJI8A-gJJToolyDafHbzIco7bH4X4y5bzZsUh5yB6ZUMy0goBkAV_KPLepnA8X2OjEJef8GHyqgHVi.QQtjD-E_MZq72hb4g0BEbw

我的 proxy.json 文件是:

{
   "target-url": "http://localhost:7005",
   "bind-address":"0.0.0.0",
   "http-port":"8080",
   "applications":[
      {
        "base-path":"/",
        "adapter-config":{
            "realm":"realm",
            "resource":"realm_ui",
            "auth-server-url":"http://localhost:8800/auth",
            "ssl-required":"external",
            "credentials": {
             "secret":"secret"
            },
            "confidential-port":0
        },
        "constraints":[
            {
               "pattern":"/*",
               "roles-allowed":[
                  "user"
               ]
            }
         ]
      }
   ]
}

在钥匙斗篷中:

Access Type: confidential
Standard Flow Enabled: ON
Direct Access Grands: ON
The Valid Redirect URI: * 

【问题讨论】:

    标签: docker docker-compose keycloak


    【解决方案1】:

    搜索了一段时间,我找到了解决方案。这是一个网络问题。 Keycloak OpenIDConnect 身份验证流程遵循 3 个步骤,如下所述:https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html

    第 1 步和第 2 步已完成,但在从浏览器接收到临时代码后,应用程序无法与 Keycloak 连接。在第 1 步和第 2 步中,始终是浏览器连接到应用程序或 Keycloak,而不是它们相互交谈。

    这发生了,因为在我的 docker-compose 文件中,我声明了覆盖自动绑定到 Keycloak 和代理的 0.0.0.0 的网络。此外,用于连接 Keycloak 的 auth-server-url 对于浏览器以及 Keycloak 安全代理的 docker 容器必须为 true。

    【讨论】:

    • 如果在不使用docker时出现错误是什么意思?
    • 您可能遇到了网络问题。它可能是一个代理。由于您没有使用 Docker Ketchikan,因此不应自动承认 0.0.0.0。我会仔细检查所有的 IP 地址,也许可以尝试使用 Wire Shark 找到解决方案。
    【解决方案2】:

    确保 keycloak.json 和 proxy.json 文件中的凭据密钥和 auth-server-url 值相同。另外,尝试删除 proxy.json 文件中的 "confidential-port":0 。

    我认为拥有公司代理不是导致此错误的原因。

    【讨论】:

    • 感谢您的帮助。你是对的,公司代理不是问题。删除 cofindential-port:0 也没有影响。
    猜你喜欢
    • 2018-06-27
    • 2020-04-14
    • 2019-07-13
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2017-02-07
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多