Docker "Failed to turn code into token" 中的 Keycloak
Keycloak in Docker "Failed to turn code into token"
我正在 运行ning Keycloak、keycloak 安全代理和 ui 应用程序 Docker-compose 网络中。当我尝试访问该网页时,我得到了一个可以使用的登录页面 - 但我没有成功重定向,而是收到以下错误:
> 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 似乎至少可以验证用户。但我对如何解决这个问题感到困惑。有人有什么想法吗?
我的 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"
]
}
]
}
]
}
在 Keycloak 中:
Access Type: confidential
Standard Flow Enabled: ON
Direct Access Grands: ON
The Valid Redirect URI: *
确保凭据机密和 auth-server-url 值在 keycloak.json 和 proxy.json 文件中相同。另外,尝试删除 proxy.json 文件中的 "confidential-port":0。
我认为有公司代理不是这个错误的原因。
找了一段时间,找到了解决办法。这是一个网络问题。
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 容器为真。
我正在 运行ning Keycloak、keycloak 安全代理和 ui 应用程序 Docker-compose 网络中。当我尝试访问该网页时,我得到了一个可以使用的登录页面 - 但我没有成功重定向,而是收到以下错误:
> 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 似乎至少可以验证用户。但我对如何解决这个问题感到困惑。有人有什么想法吗?
我的 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"
]
}
]
}
]
}
在 Keycloak 中:
Access Type: confidential
Standard Flow Enabled: ON
Direct Access Grands: ON
The Valid Redirect URI: *
确保凭据机密和 auth-server-url 值在 keycloak.json 和 proxy.json 文件中相同。另外,尝试删除 proxy.json 文件中的 "confidential-port":0。
我认为有公司代理不是这个错误的原因。
找了一段时间,找到了解决办法。这是一个网络问题。 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 容器为真。