在使用 PHP (Codeigniter) 建立经过身份验证的 session 后,如何在 JavaScript 中重定向到另一个网站

How to redirect in JavaScript to another website after establishing an authenticated session using PHP (Codeigniter)

已解决

问题的标题不够,我会在这里详细说明。

问题

我有两个系统,我们称它们为 system Asystem BSystem A 是一个 Petite-vue/Codeigniter 堆栈。 System B 可以是 Codeigniter 或 Laravel back-end(front-end 可能不同)。 这是显示设置的图表(R1R2 将在下面解释)。

NOTE: In the graph below R2 is sent from the back-end to system B.

system A中,我正在发出一个异步Fetch请求,让我们调用这个请求R1,从 JavaScript (petite-vue) 代码到 PHP (Codeigniter),它在同一个系统中(它是 system A ). (下面的代码)

      function Connect_To_System(url){
        fetch("<?= base_url("connect") ?>",
                {
                  method: "POST",
                  body: JSON.stringify( {URL: url} )
                })
                .then(res => res.json())
                .then(data => {
                  // do something with response data like showing a message
                }) 
      }

R1 在 PHP (Codeigniter) 代码中处理,该代码使用 [ 建立经过身份验证的 sessionsystem B 通过发送一个 cURL 请求,让我们调用这个请求 R2,到 system B.在 R2 响应 returns HTTP 200 状态后,我想将用户从 system A 重定向到system B 在新标签页中。 (下面的代码,注意我用的是REST_Controller)

    public function connect_post(){
        $data = json_decode($this->post()[0]);
        $url = $data->URL;
        $url_login = $url.'/auth/login';
        $token = $this->session->tempdata('token');
        $username = $this->current_user['emp_no'];
        $digest = md5($username.$token);

        $params= array(
            "username" => $username,
            "token" => $token
        );
        $result = $this->postCURL($url_login, $params);
        // Redirect in a new tab when status is 200 somehow
        // Return a response to the JavaScript
    }

问题是我无法将用户从 PHP (Codeigniter) 重定向到另一个页面,因为它是由 R1 调用的.因此,我必须使用 JavaScript.

从创建 R1 的视图重定向用户

但是,第一个问题的解决方案不起作用,因为 R2 建立的 session 绑定到 PHP (Codeigniter),或者 cURL 我真的说不出来,换句话说,它是建立 session 的服务器而不是用户。使用 JavaScript 重定向用户会将重定向绑定到用户,或者任何重定向方法。

可能的解决方案(不是首选 EDIT: It is preferred

唯一可行的解​​决方案是从 JavaScript 建立 session 与 system B 然后重定向用户,这就是我目前正在做。但问题是我将身份验证数据暴露给那些只是决定打开浏览器检查的人。这就是为什么我试图将所有重要数据保留在 back-end PHP 代码中。

主要目标

我想要的只是一种隐藏身份验证数据的方法,无论是什么方法,如果真的可行的话。

提前谢谢你。

事实证明,问题中提出的解决方案实际上是首选。由于用户的令牌是如此个性化,它甚至存储在服务器会话中并存储在数据库中,因此很难使用其他人的身份验证数据来验证您自己。因此,不存在重大安全漏洞。公开数据的想法让我感到害怕,因为它让我看不到公开令牌并不是一个巨大的安全漏洞。