我在由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至少可以验证用户身份。但是我很困惑如何解决这个问题。有没有人有什么想法?
我的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"
]
}
]
}
]
}
在 key 斗篷中:
Access Type: confidential
Standard Flow Enabled: ON
Direct Access Grands: ON
The Valid Redirect URI: *
最佳答案
搜索了一段时间后,我找到了解决方案。这是一个网络问题。
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文件中,我声明了覆盖了自动绑定(bind)到Keycloak和代理0.0.0.0的网络。此外,对于浏览器以及Keycloak安全代理的docker容器,用于连接Keycloak的auth-server-url必须为true。
关于docker - Docker中的 key 斗篷 "Failed to turn code into token",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51674331/