我将我的Keycloak服务器和Web应用程序连接到Keycloak,以登录到该应用程序。
如果我在本地运行,它会完美重定向,但是如果我将服务器和Web应用程序部署在同一服务器上,则当Web应用程序重定向到keycloak时,它将重定向到localhost而不是远程URL。
有什么主意如何避免重定向到本地主机?
答案 0 :(得分:2)
对于Spring Boot Web应用程序,重定向URL在属性中定义为:
keycloak.auth-server-url = http://localhost:8080/auth
如果您具有JSON配置文件,则它将类似于:
{
...
"auth-server-url" : "http://localhost:8080/auth"
}
有关更多详细信息,您可以查看Securing Apps文档
答案 1 :(得分:0)
最后,我找到了一个适合我的情况的答案。我创建了一个KeycloakConfigResolver类,在其中根据正在运行的计算机的主机加载KeycloakDeployment,就像它完全重定向到所需的主机一样。
@Configuration
public class PathServerKeycloakConfigResolver implements KeycloakConfigResolver
{
@Override
public KeycloakDeployment resolve(Request request)
{
String hostname = "Unknown";
try
{
InetAddress addr;
addr = InetAddress.getLocalHost();
hostname = addr.getHostName();
return KeycloakDeploymentBuilder.build(getKeycloakJson(hostname));
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
}
private InputStream getKeycloakJson(String hostname) throws IOException
{
InputStream inputStream = new FileInputStream("src/main/resources/keycloak.json");
InputStreamReader isReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(isReader);
StringBuffer sb = new StringBuffer();
String str;
while ((str = reader.readLine()) != null)
{
sb.append(str);
}
return new ByteArrayInputStream(sb.toString().replace("{param_keycloak_server}", hostname).getBytes(StandardCharsets.UTF_8));
}
}
keycloak.json在哪里
{
"realm": "FocusocKeycloak",
"auth-server-url": "http://{param_keycloak_server}:8080/auth",
"ssl-required": "external",
"resource": "login-app",
"verify-token-audience": true,
"credentials": {
"secret": "XXX"
},
"confidential-port": 0,
"policy-enforcer": {}
}