For cookie based authentication, my server sends Set-Cookie
to my Angular application. However, the application doesn't send the value back in further requests. Following is my code.
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
withCredentials: true //this is required so that Angular returns the Cookies received from the server. The server sends cookies in Set-Cookie header. Without this, Angular will ignore the Set-Cookie header
};
public getUserProfile(){
console.log('contacting server at '+this.API_URL +this.GET_USER_PROFILE_URL+"with httpOptions "+httpOptions);
return this.http.get(this.GET_USER_PROFILE_URL,httpOptions )
.map(response=>{
console.log('response from backend service',response);
let result= <ServerResponse>response;
console.log("result is "+result.result+' with additional information '+result.additionalInformation)
return result;
})
.catch(this.handleError);
}
The server sends the cookie as follows in 200OK of my code (not shown here)
Set-Cookie: id=...
The next message however hasn't got the id
in the cookie, thus the server returns 401. If I manually add the Cookie using browser's debug tools, then I get 200OK. Thus I am certain it is the absence of the id
value in the cookie which is causing the issue.
What am I doing wrong? Do I need to explicitly store the cookie received in Set-Cookie
and explicitly add it in further requests?
Update -
At the time when the SPA is initially loaded, the server sends Set-Cookie
header with some other cookie's information related to CSRF
. I notice that that cookie is still sent by the application. Could it be that Angular honors the first Set-Cookie
header but ignores the subsequent ones?
I have added couple of pics to explain what I mean
During signing, the client sends a cookie related to CSRF. I dont think it is required as the client also sends CSRF Header but for some reason it does. The server responds with Set-Cookie with id in it
Then when I ask for profile, the client again sends the CSRF cookie but not the id cookie