Docker中的密钥斗篷“无法将代码转换为令牌”

时间:2018-08-03 13:59:49

标签: docker docker-compose keycloak

我正在Docker组成的网络中运行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://wimi5.com/how-to-create-a-gamebot-in-telegram-with-nodejs/

我的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: * 

2 个答案:

答案 0 :(得分:2)

搜索了一段时间后,我找到了解决方案。这是一个网络问题。 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安全代理的docker容器,用于连接Keycloak的auth-server-url必须为true。

答案 1 :(得分:0)

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

我认为拥有公司代理人不是造成此错误的原因。