提问人:Emma Razafy 提问时间:10/11/2023 更新时间:10/11/2023 访问量:16
无法从 php curl 调用的 spring boot 3 后端设置 cookie
Can't set cookie from spring boot 3 backends called from php curl
问:
环境
- 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,而不仅仅是在响应标头和页面输出中。
答: 暂无答案
评论