EC2와 도메인 연결하기 with Spring Security {baseUrl}
외부 서버에서 구글 OAuth2 로그인을 위해서
redirect-uri를 localhost뿐만아니라 외부 서버 주소를 등록하려고 했더니..
구글의 리디렉션 URI는 도메인 형식으로만 가능하다고 한다...
localhost는 도메인 형식이 아니라도 허용해둔 것 같다...
그래서~~ 도메인을 연결해보기로 한다.
가비아에서 도메인을 구매했는데 구매 후 즉시 구매한 도메인 관리가 탭은 안뜨고 5~10분 후에 뜬다.
왜 결제했는데 바로 안뜨나 했다.
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
dpt:http redir ports 8080 : port http(80)으로 들어오는것을 8080 포트로 접근하게 된다는 뜻이다.
포트 포워딩에 우선순위가 있기에 80 포트에 대해 여러개의 규칙이 있다면 제일 위에 있는 상위 포트가 우선순위로 적용된다.
포트 포워딩 삭제
sudo iptables -t nat -D PREROUTING {삭제할 번호(num 말하는거임)}
드디어 도메인 연결이 된다~
+ Spring Security BaseUrl
신나는 마음으로 도메인으로 접속한 프로젝트 사이트에서 OAuth2 로그인을 시도했더니..
도메인으로만 등록이 가능하던 구글 로그인은 잘 돌아가는데
기존의 카카오, 네이버 로그인이 Redirect Uri 문제가 발생했다.
그러나 도메인을 사용하기 이전에 접속했던 것 처럼
IP 주소를 직접치고 웹에 접속하면 Redirect-uri가 올바르다며 잘 수행한다.
해결 방법으로 다음과 같이 도메인을 base-url로 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에 도메인도 추가해주어서 해결하자!!!