无法从 php curl 调用的 spring boot 3 后端设置 cookie

Can't set cookie from spring boot 3 backends called from php curl

提问人:Emma Razafy 提问时间:10/11/2023 更新时间:10/11/2023 访问量:16

问:

环境

  • frontend:php CodeIgniter 3.6 在 localhost:82:80 上的 nginx-php-fpm 容器中
  • 后端:主机上的 Spring Boot 3 RESTful API (localhost:83)

问题详细信息:
除了身份验证所需的 cookie 创建外,我的后端已通过 php curl 从我的前端成功调用。当我在邮递员或浏览器中使用后端 url 时,后端创建 cookie 没有问题,但当我通过 php curl 从前端调用它时没有创建 cookie。我已经按照 spring rest api 中的建议检查了浏览器中关于第三方 cookie 阻止的信息,无法设置 Set-Cookie 以及如何在 Chrome、IE、Firefox、Edge 和 Safari 中启用或禁用 Cookie,但没有成功。
我已经被困在那里很多天了。任何帮助将不胜感激。

我试过什么:

  • backend:测试创建 cookie 端点。
@RestController
@RequestMapping("/cookie-test")
@Slf4j
public class TestCookie {
    @Value("${security-config.frontend-url}")
    private String frontEndUrl;

    @GetMapping("/create")
    private ResponseEntity<String> createCookie(HttpServletResponse httpResponse){
        Cookie cookie = new Cookie("auth-cookie", "some-jwt-value");
        cookie.setHttpOnly(false);
        cookie.setSecure(false);
        cookie.setMaxAge(600);
        cookie.setPath("/");
        httpResponse.addCookie(cookie);
        return ResponseEntity.ok("Cookie auth-cookie should be created on the current browser.");
    }
}
  • frontend:cURL 调用
        $handle = curl_init();
        $url = "http://host.docker.internal:83/cookie-test/create";
        curl_setopt_array($handle,
            array(
                CURLOPT_URL => $url,
                CURLOPT_HEADER => true
            )
        );
        $data = curl_exec($handle);
        $responseCode =
            curl_getinfo($handle,
                CURLINFO_HTTP_CODE
            );

        echo "<br><br>responseCode: $responseCode";

        if(curl_errno($handle))
        {
            echo "<br><br>error: ".curl_error($handle);
            print "error: ".curl_error($handle);
        }
        if($responseCode == "200") echo "<br><br>successful request";


        echo "<br><br>data: $data";

        curl_close($handle);

浏览器设置:第三方 Cookie 未阻止。第三方 cookie 未阻止结果:在 http://localhost:82/CurlTest/curl_to_back_end 上浏览时

HTTP/1.1 200 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Set-Cookie: auth-cookie=some-jwt-value;最大年龄=600;到期=Wed, 11 Oct 2023 14:08:35 GMT;path=/ x-content-type-options: nosniff X-XSS-Protection: 0 Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame-Options: DENY Content-Type: text/plain;字符集=ISO-8859-1 内容长度:60 日期:2023 年 10 月 11 日星期三 13:58:35 GMT Cookie 身份验证 cookie 应在当前浏览器上创建。

响应代码:200

请求成功

数据: 1

预期结果:在浏览器中创建真正的身份验证 cookie,而不仅仅是在响应标头和页面输出中。

spring-boot php-curl

评论


答: 暂无答案