대머리개발자

Armeria 프레임워크 - 리다이렉트(2) 본문

개발이야기/자봐

Armeria 프레임워크 - 리다이렉트(2)

대머리개발자 2023. 10. 6. 10:12
728x90

레퍼런스가 없다는건.....경험치로 알 수 있다...행복끝 삽질 시작... 

 

최초 혼자만의 프로젝트 형태로 진행했기에 깊게 생각하지 않고 되는대로 넘어 갔으나 이제는 뒤가 없다. ㅠ 아니 있지만.. 물러 설 수 없다..

 

리다이렉트를 도와 주는 RedirectService 고마운 친구가 있다. 그러나 나는 좀 더 친절한 친구가 필요했다.

쿠키를 같이 넘겨주는 친구가 필요했다. ㅠㅠ  RedirectService  명세는 쿠키에 대한 명세가 없다.

하악하악... RedirectService 내에  serve() 메서드의 return 형태 힌트로 헤더에 쿠키 값을 셋팅해보기 시작했다.

20분 삽질...중.. 오케!! 쿠키에 대해서 공부좀 해보자!!  쿠키 너 뭐야!

 

 

Set-Cookie로 브라우저에 쿠키 저장하기

Cookie 세션 스토리지, 로컬 스토리지, 등등 웹 브라우저에는 정보를 저장할 수 있는 공간이 있다. 최근에 jwt 인증방식을 위해 쿠키를 구워야 했다. 쿠키는 유저들의 효율적이고 안전한 웹 사용을

velog.io

쿠키야 오.. 호락호락한 친구가 아닌구만....그냥 한번에 되면 안되겠니..

 

일단 정답 부타 짚고 가자!

serverBuilder.service(Constants.Context.AUTH_PATTERN, (ctx, req) -> {
    String target = ctx.pathParam("clientId");
    Redirect redirect = ServiceUtil.getNaverOauth2Service().getRedirectUrl(ctx.queryParams(), target);
    return HttpResponse.of(ResponseHeaders.builder(HttpStatus.TEMPORARY_REDIRECT)
            .addObject(HttpHeaderNames.SET_COOKIE,
                    Cookie.secureBuilder(OAuth2Constants.ACCESS_TOKEN, redirect.getAccess_token()).httpOnly(false).path("/").build().toSetCookieHeader())
            .addObject(HttpHeaderNames.SET_COOKIE,
                    Cookie.secureBuilder(OAuth2Constants.REFRESH_TOKEN, redirect.getRefresh_token()).httpOnly(false).path("/").build().toSetCookieHeader())
            .set(HttpHeaderNames.LOCATION, redirect.getRedirect_url())
            .build());
});

 

1. 서버에서 클라이언트로 보내는 response에 쿠키 네임은 "Set-Cookie"로 지정해야한다. "Cookie" 안 된다. ㅋㅋ

2. httpOnly를 false로 설정해야 클라이언트에서 읽을 수가 있다.

명세...명세...가 없다.. 시행착오를 거쳐야 한다. 근데 잘 알지 못하는 상태에서 얻어 걸리려고 하니깐.

 

아르메리아에서 쿠키 클래스가 있는것을 확인하고 아래와 같이 쿠키를 보냈다...

Cookie.secureBuilder(OAuth2Constants.ACCESS_TOKEN, redirect.getAccess_token()).path("/").build()

뭐 어째거나 hedader 값으로 보내는 로그는 있으니 잘못된 값이라도 쿠키값이 있어야 되는 건데. 텅텅이니깐....아오...다른곳에서... 엄한곳에서 삽질을..ㅡㅡㅎ

.toSetCookieHeader()를 붙이니깐... 잘 나온다.

Cookie.secureBuilder(OAuth2Constants.ACCESS_TOKEN, redirect.getAccess_token())
.path("/").build().toSetCookieHeader()

근데.. 클라이언트에서.. 쿠키값을 못 불러 오네??

.httpOnly(false) 

Cookie.secureBuilder(OAuth2Constants.ACCESS_TOKEN, redirect.getAccess_token())
.httpOnly(false).path("/").build().toSetCookieHeader()

원리를 알고 하기에... 너무 알것들이 많다.......ㅜ 양질의 블로그들이 많이 있으면 좋겠다.

 

아르메리아!! 굿럭!

728x90

'개발이야기 > 자봐' 카테고리의 다른 글

[JPA] DB에서 자동 생성된값 바인딩  (0) 2024.02.28
Armeria 프레임워크 - Authorizer<HttpRequest>  (0) 2023.10.12
flatMap vs Map  (2) 2023.09.15
reactive 리팩토리..  (0) 2023.08.04
jib 이용한 컨테이너 배포  (0) 2023.07.25