2017-02-13 389 views
2

我們正在開發一個帶有REST API的網站(AngularJS 1.6.1中的前端,Laravel 5.3中的後端)。 爲了增加CSRF保護,我們的後端需要用隨機字符串在客戶端設置一個後端cookie。在laravel中,我們返回這個響應: response(「OK」,200) - > cookie(「csrf_token」,「random_string」);儘管設置了Cookie,但Laravel Cookie仍未設置

的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($請求 - >餅乾(「csrf_token」)返回null

如果我們忽略域,它甚至沒有工作,任何想法

回答

2

對於Angular在CORS(跨源資源共享請求)中發送cookie以及請求,您需要se T,與$httpProvider你的配置注入的依賴性:

.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    //rest of route code 
} 
0

當您使用。? Laravel不需要自己設置csrf cookie,Laravel自動爲你做這個工作

所以laravel自動創建一個cookie來存儲csrf標記,該cookie的名字是「XSRF-TOKEN」。

+0

我們有兩種不同的服務器:後端服務器(與laravel)和前端服務器(與angularjs)。所以這個通常會自動執行的工作並不適用於我們的架構。 – Finn87