프로그래밍/spring

EC2와 도메인 연결하기 with Spring Security {baseUrl}

승민아 2024. 8. 11. 17:57

외부 서버에서 구글 OAuth2 로그인을 위해서

redirect-uri를 localhost뿐만아니라 외부 서버 주소를 등록하려고 했더니..

도메인으로 끝나야합니다.

구글의 리디렉션 URI는 도메인 형식으로만 가능하다고 한다...

localhost는 도메인 형식이 아니라도 허용해둔 것 같다...

그래서~~ 도메인을 연결해보기로 한다.

 

도메인 구매 완료

가비아에서 도메인을 구매했는데 구매 후 즉시 구매한 도메인 관리가 탭은 안뜨고 5~10분 후에 뜬다.

왜 결제했는데 바로 안뜨나 했다.

 

DNS 설정

DNS 설정에 위와 같이 호스트에 www, @를 넣고 값/위치는 서버 IP 주소를 넣어주자.

여기에 계속 123.456:8080과 같이 포트도 넣으려 했는데 포트는 들어가지 않기에 나중에 포트 포워딩도 해주어야한다.

그러니 서버 IP 주소만 넣어주자.

호스트에 @는 www.test.kr 말고 test.kr로 접속이 가능하게하는 것이다. 

 

 

Amazon Route 53을 통해 구매한 도메인과 EC2를 연결하는 글이 많지만

EC2 서버에서 포트 80으로 들어오는 요청을 8080으로 포트 포워딩을 할 예정이다.

 

NAT(네트워크 주소 변환) 테이블 출력

iptables 명령어로 ip를 관리하는 테이블 조작이 가능하다.

sudo iptables -t nat -L --line-numbers

명령어 결과

현재 80 포트 -> 8080 포트로 설정이 안되어 있는 상태이다.

 

80 포트 -> 8080 포트

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

 

num 속성에 2 값이 들어가있는게 추가 되었다.

dpt:http redir ports 8080 : port http(80)으로 들어오는것을 8080 포트로 접근하게 된다는 뜻이다.

포트 포워딩에 우선순위가 있기에 80 포트에 대해 여러개의 규칙이 있다면 제일 위에 있는 상위 포트가 우선순위로 적용된다.

 

포트 포워딩 삭제

sudo iptables -t nat -D PREROUTING {삭제할 번호(num 말하는거임)}

 

 

 

도메인 연결 성공

드디어 도메인 연결이 된다~

 

+ Spring Security BaseUrl

신나는 마음으로 도메인으로 접속한 프로젝트 사이트에서 OAuth2 로그인을 시도했더니..

도메인으로만 등록이 가능하던 구글 로그인은 잘 돌아가는데

Redirect-uri

 

기존의 카카오, 네이버 로그인이 Redirect Uri 문제가 발생했다.

 

그러나 도메인을 사용하기 이전에 접속했던 것 처럼

IP 주소를 직접치고 웹에 접속하면 Redirect-uri가 올바르다며 잘 수행한다.

 

해결 방법으로 다음과 같이 도메인을 base-url로 Redirect-URI를 추가해주자.

Redirect-URI에 도메인 추가

도메인으로 접속했을때의 URI를 허용하지 않았기 때문이다.

 

application.properties에 작성한 Spring Security OAuth2 Redirect-URI는 다음과 같다.

spring.security.oauth2.client.registration.kakao.redirect-uri= {baseUrl}/members/signin/{registrationId}

위의 설정은 https://docs.spring.io/spring-security/reference/servlet/oauth2/login/core.html 문서에 따르면

localhost:8080/members/signin/kakao를 {baseUrl}/members/signin/{registerationId}로 URI 템플릿을 사용할 수 있다.

여기에 {baseUrl}을 사용했기에 접속한 Url을 그대로 따르기 때문에 

IP주소로 접속했다면 IP주소가 baseUrl에 들어가고

도메인으로 접속했다면 도메인으로 baseUrl이 들어가는 것이다.

 

 

그래서 도메인으로 접속했을때를 고려해 각 소셜 로그인의 Redirect-URI에 도메인도 추가해주어서 해결하자!!!