我们正在开发一个带有REST Api的网站(AngularJS 1.6.1中的前端,Laravel 5.3中的后端)。 为了添加CSRF保护,我们的后端需要使用随机字符串在客户端上设置后端cookie。在laravel中,我们返回此响应: 响应(“OK”,200) - > cookie(“csrf_token”,“random_string”);
Cookie显然是通过响应设置的:
*Request headers*
POST /v1/auth/admin HTTP/1.1
Host: backend.test
Connection: keep-alive
Content-Length: 295
Accept: */*
Origin: http://frontend.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://frontend.test/login
Accept-Encoding: gzip, deflate
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
*Response header*
HTTP/1.1 200 OK
Server: nginx/1.11.3
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: http://frontend.test
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH
Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
Date: Mon, 13 Feb 2017 11:46:16 GMT
Set-Cookie: csrf_token=random_string; expires=Sat, 12-Feb-2022 11:46:16 GMT; Max-Age=157680000; path=/; domain=http://backend.test; HttpOnly
但是,当我转到http://backend.test网址时,没有设置cookie(控制台中的document.cookie返回null)。 后端也看不到cookie:dd($ request-> cookie(“csrf_token”)返回null。
即使省略域名也不起作用。有什么想法吗?
答案 0 :(得分:2)
对于Angular在CORS(跨源资源共享请求)中发送cookie以及请求,您需要在配置中设置UIBarButtonItem.appearance().tintColor = UIColor.green
作为依赖项注入:
$httpProvider
答案 1 :(得分:0)
使用Laravel时,您不必自己设置csrf cookie。 Laravel会自动为您完成这项工作。
因此laravel会自动创建一个cookie来存储csrf令牌。该cookie的名称是“XSRF-TOKEN”。