2017-02-03 16 views
5

chcę użyć HttpOnly ciasteczka i ustawić go w Javie, co następuje:HttpOnly ciasteczka nie wysłane zamówienie

... 

Cookie accessTokenCookie = new Cookie("token", userToken); 
accessTokenCookie.setHttpOnly(true); 
accessTokenCookie.setSecure(true); 
accessTokenCookie.setPath("/"); 
response.addCookie(accessTokenCookie); 
Cookie refreshTokenCookie = new Cookie("refreshToken", refreshToken); 
refreshTokenCookie.setHttpOnly(true); 
refreshTokenCookie.setSecure(true); 
refreshTokenCookie.setPath("/"); 
response.addCookie(refreshTokenCookie); 

... 

Mam stronie klienta odpowiedź z plików cookie, ale kiedy wysłać zapytanie Następne I nie ma plików cookie na żądanie. Może coś mi umknęło, ale jak zrozumiałem, te ciasteczka muszą być wysyłane przez przeglądarkę z powrotem na każde żądanie (JavaScript nie ma dostępu do tych ciasteczek) zbliżających się do zdefiniowanej ścieżki.

Mam następujące nagłówki żądanie:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,hu;q=0.6,ro;q=0.4,fr;q=0.2,de;q=0.2 
Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ= 
Connection:keep-alive 
Content-Length:35 
content-type:text/plain 
Host:localhost:8080 
Origin:http://localhost:4200 
Referer:http://localhost:4200/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 
X-Requested-With:XMLHttpRequest 

oraz następujące nagłówki odpowiedzi:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:4200 
Access-Control-Expose-Headers:Access-Control-Allow-Origin, Content-Type, Date, Link, Server, X-Application-Context, X-Total-Count 
Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Length:482 
Content-Type:application/json;charset=ISO-8859-1 
Date:Fri, 03 Feb 2017 13:11:29 GMT 
Expires:0 
Pragma:no-cache 
Set-Cookie:token=eyJhbGciO;Max-Age=10000;path=/;Secure;HttpOnly 
Set-Cookie:refreshToken=eyJhb8w;Max-Age=10000;path=/;Secure;HttpOnly 
Vary:Origin 

Również po stronie klienta używam withCredentials: true w Angular2 i X-Requested-With:XMLHttpRequest jako nagłówka żądania.

I to jest domena krzyżowa.

+0

Cześć !! Zmierzyłem się z tym samym problemem. Kiedy usunąłem flagę tylko HTTP, to działa. Czy znalazłeś jakieś inne dzieło? –

+0

Po usunięciu flagi Bezpieczne z plików cookie, rozwiązano problem. –

+0

Wielkie dzięki! Działa –

Odpowiedz

1

Tak, zgadzasz się z tym, że Twoja przeglądarka ciasteczka powinna automatycznie wysyłać plik cookie, gdy nie wygasł, a flaga httpOnly oznacza, że ​​nie można uzyskać do niego dostępu lub manipulować przez JavaScript.

Jednak

Musisz się upewnić, że plik cookie jest wysyłany nie jest domeną krzyż, jeśli wymagają tego przekrój domenę trzeba będzie poradzić inaczej.

+0

Tak, jest to ciasteczko międzydomenowe, jak mam sobie z tym poradzić? –

+0

Osobiście korzystam z JWT i nagłówków, ale jeśli musisz używać plików cookie w wielu domenach, wypróbuj http://stackoverflow.com/questions/3342140/cross-domain-cookies –

+0

. Zaktualizowałem pytanie, aby było bardziej precyzyjne: –