Ubuntu 서버에서 로그인시 401 error

앱이름 : automart
앱 아이디 : 515401

java springboot로 oauth2 client를 구현하였는데요.

로컬환경에서 http://localhost:8080/oauth2/authorization/kakao 로 들어가 로그인을 진행하면 응답코드 200이 뜨면서 정상적으로 토큰이 발급됩니다.

그런데 AWS EC2 ubuntu를 통해서 동일코드를 서버에 배포한다음
http://www.automart.ml/oauth2/authorization/kakao
또는
http://52.78.123.79/oauth2/authorization/kakao
로 접속하여 동일하게 로그인을 하면 401 에러가 뜨면서 토큰이 발급되지 않습니다 ㅠㅠ
추가로 발급된 code를 직접 Postman에서 https://kauth.kakao.com/oauth/token 으로 넣고 요청을 날리면 토큰이 발급됩니다.

대체 무슨 문제인거죠??

1개의 좋아요

안녕하세요!

http://www.automart.ml/oauth2/authorization/kakao
http://52.78.123.79/oauth2/authorization/kakao

위 두 주소로 접속해서 동의창에 동의를 하는 경우 정상적으로 인가코드 발급이 이뤄지는것 확인했습니다.
다만 발급받은 인가코드로 토큰 요청을 보내지 않는 것으로 보이는데요,

Redirect URI를 통해 전달된 인가코드로, 사용자 토큰을 요청하는지 확인부탁드릴게요

1개의 좋아요

크롬 개발자모드로 확인해보니,
말씀하신것처럼 인가코드는 302 code가 뜨면서 정상적으로 발급이 됩니다.

HTTP/1.1 302 Found
Content-Length: 0
Location: http://www.automart.ml/login/oauth2/code/kakao?code={AUTHORIZE_CODE}

그런데, 여기서 http://www.automart.ml/login/oauth2/code/kakao?code={AUTHORIZE_CODE} 로 GET 요청을 날리는 과정에서 토큰이 발급되지 않고 401 에러가 뜹니다.

HTTP/1.1 401
Server: nginx/1.19.6
Date: Wed, 27 Jan 2021 09:40:54 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 289
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: JSESSIONID=D7845459D15A94FB7731D3A2BA7C7788; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Language: ko-KR

로컬에선 아래처럼 이부분에서 정상적으로 토큰이 발급되서 Header에 Authorization에 담겨서 응답되던데
제가 뭘 놓치는 부분이 있나요?? ㅠㅠ

HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: JSESSIONID=8FAA468CDA0AA8A69A6258D44D486CA4; Path=/; HttpOnly
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb292ZTE5OTdAbmF2ZXIuY29tIiwiaWF0IjoxNjExODE1MjI3LCJleHAiOjE2MTE4MTg4Mjd9.6Cgl3zVMDPK-JwMpa8Hni4phui4nBoLZFVCBYr169d8
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Thu, 28 Jan 2021 06:27:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

혹시… 인가코드 발급이 이루어지면 제가 따로 코드로 토큰 요청을 해야 하는건가요?
같은 코드인데 로컬에선 토큰 요청이 자동으로 되고, 배포된 서버에서는 토큰 요청을 코드로 구현해서 수동으로 해줘야 하는건가요…? 혼란스럽네여 ㅠㅠ

인가코드 요청과 사용자토큰 요청은 별도로 이루어집니다.

인가코드는 사용자토큰 요청에 사용되는 1회용 코드로, 사용자 토큰을 요청하기전 인가코드를 요청해주셔야 합니다.

위와 같이 Redirect URI로 인가코드(AUTHORIZE_CODE)를 받으신 뒤에는 해당 코드를 사용하여
사용자토큰 요청을 해주셔야 합니다.

REST API 방식을 사용하고 계신다면 로컬에서도 토큰요청은 직접 해주셔야 합니다.

사용자 토큰 요청과 관련된 내용은 디벨로퍼스 가이드를 참고해주세요

1개의 좋아요

로컬에서는 따로 토큰요청을 하지 않았는데 헤더로 Bearer 토큰이 발급되어 전송되는건 토큰요청과 다른건가요…?

사용자 토큰은 헤더가 아닌 response body로 전달됩니다.
현재는 토큰 요청을 보내고 계시고, 정상적으로 토큰 응답을 받고 계신 것으로 보여집니다.

아 제 코드는 자동으로 spring security oauth client를 이용해서 필터를 거치면서 토큰요청을 하는거였네요.
로그를 살펴보았는데,

2021-01-29 06:21:30.789 DEBUG 1 --- [nio-8080-exec-9] o.s.security.web.FilterChainProxy        : /login/oauth2/code/kakao?code=WUfsXPc1_HRTAGcuV9m-fwoNpS0RlKRf1LyOQhJV0POeLV3_oHjFThsuukeq5C40wZkTQwo9dNoAAAF3TM3JAw&state=zvn9tnsYp59oWQWc5icFomO_ewKng7XAMeY1sSizoHU%3D at position 7 of 15 in additional filter chain; firing Filter: 'OAuth2LoginAuthenticationFilter'
2021-01-29 06:21:30.789 DEBUG 1 --- [nio-8080-exec-9] o.s.s.w.u.matcher.AntPathRequestMatcher  : Checking match of request : '/login/oauth2/code/kakao'; against '/login/oauth2/code/*'
2021-01-29 06:21:30.789 DEBUG 1 --- [nio-8080-exec-9] .s.o.c.w.OAuth2LoginAuthenticationFilter : Request is to process authentication
2021-01-29 06:21:30.793 DEBUG 1 --- [nio-8080-exec-9] .s.o.c.w.OAuth2LoginAuthenticationFilter : Authentication request failed: org.springframework.security.oauth2.core.OAuth2AuthenticationException: [authorization_request_not_found]

org.springframework.security.oauth2.core.OAuth2AuthenticationException: [authorization_request_not_found]
at org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter.attemptAuthentication(OAuth2LoginAuthenticationFilter.java:163) ~[spring-security-oauth2-client-5.3.5.RELEASE.jar!/:5.3.5.RELEASE]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.3.5.RELEASE.jar!/:5.3.5.RELEASE]

위처럼 authorization_request_not_found 가 뜨더라구요.
로컬에서는 저 에러가 뜨지 않고 토큰 발급 요청으로 넘어가는데 배포된 서버에서는 저에러가 뜨면서 토큰 요청 없이 종료되버려요 ㅜㅜ
서버에 배포할때 jenkins랑 docker를 이용해서 blue-A, bule-B 이런식으로 배포하였는데 이게 원인이 될수 있는건가요?
104724514-18dea780-5774-11eb-967d-d74189914d12

안녕하세요 똑같은 오류가 발생되는데 혹시 어떻게 해결하셨는지 알 수 있을까요?

안녕하세요.

authorization_request_not_found 오류는 서비스측 인가 및 세션 처리가 미흡하거나 그 과정중에 오류가 있어 authorizationRequest 값을 확인하지 못하는(null) 경우 발생할 수 있습니다.