Mam backend napisany w Springu oraz frontned napisany w Angularze i staram się napisać logowanie do systemu.
Zamysł jest taki, wystawiam REST API które przyjmuje login i hasło użytkownika i po poprawnej walidacji zwraca access oraz refresh token w postaci HttpCookie. Do każdego następnego requestu dołączam te tokeny i je waliduje przed wpuszczeniem użytkownika do systemu.
W każdym razie, nie działa to dokładnie tak jak myślałem.
Po stronie backendu dla celów testowych mam coś takiego:
@PostMapping("/sign-in")
fun signIn(@RequestBody request: SignInRequest, response: HttpServletResponse): ResponseEntity<Void> {
val accessTokenCookie = Cookie("access_token", "access_token_value")
accessTokenCookie.isHttpOnly = true
response.addCookie(accessTokenCookie)
return ResponseEntity(HttpStatus.OK)
}
Oraz filtr, który każdy sprawdza każdy przychodzący request, którego faktycznie implementacja również jest zbędna, póki co po prostu loguje to co przychodzi
request.cookies?.forEach { println(it.name + " : " + it.value) } ?: print("no cookies")
No i po stronie frontu, mam takie dwie metody
httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
withCredentials: true,
observe: 'response' as 'response'
};
signIn() {
this.httpClient.post("http://localhost:8081/api/auth/sign-in", {
email: "test@user.com",
password: "user",
},
this.httpOptions
).subscribe()
}
testCall() {
this.httpClient.get(
"http://localhost:8081/api/test",
this.httpOptions
).subscribe()
}
Po pierwszym strzale do sign-in w network widzę ustawione cookies

Każdy kolejny strzał do tego endpointu pokazuje mi też wspomniane cookie załączone do requestu.
Problem jednak pojawia się gdy wywołuje testCall(), żadne cookies nie są wtedy dołączone do requestu
Pozostaje więc pytanie - czemu?