【问题标题】:Keycloak redirects localhost and not redirect remote urlKeycloak 重定向 localhost 而不是重定向远程 url
【发布时间】:2020-03-11 09:00:28
【问题描述】:

我的 Keycloak 服务器和我的 Web 应用程序连接到 Keycloak 以登录到应用程序。

如果我在本地运行,它的重定向完美,但如果我将服务器和 Web 应用程序部署在同一服务器中,当 Web 应用程序重定向到 keycloak 时,它会重定向到 localhost 而不是远程 url。

知道如何避免重定向到本地主机吗?

【问题讨论】:

    标签: java web redirect server keycloak


    【解决方案1】:

    最后我找到了一个更适合我的答案。我创建了一个 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": {}
    }
    

    【讨论】:

      【解决方案2】:

      对于 Spring Boot Web 应用重定向 URL 在属性中定义为:

      keycloak.auth-server-url = http://localhost:8080/auth
      

      如果你有 JSON 配置文件,那么它看起来像:

      {
        ...
        "auth-server-url" : "http://localhost:8080/auth"
      }
      

      有关更多详细信息,您可以查看Securing Apps 文档

      【讨论】:

      • 我有这个配置,但问题是如果我尝试访问应用程序,当我部署在远程服务器中时,它会将我重定向到“localhost”,但在远程服务器和我的浏览器中尝试访问“localhost”(本地机器)
      • 部署到远程服务器时,您应该设置远程服务器的 URL。所以在生产代码中,你的配置应该看起来像keycloak.auth-server-url=${KEYCLOAK_REDIRECT_URL}。然后你应该为你的远程服务器定义像KEYCLOAK_REDIRECT_URL=http://remote.server.com/auth这样的环境变量。
      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2019-07-05
      • 2014-09-19
      • 2019-04-12
      • 2018-09-12
      • 2019-09-15
      • 2021-12-17
      • 2013-01-17
      相关资源
      最近更新 更多