OAuth2.0 로그인은 크게 두가지로 생각하면 된다.
첫번째는 인증을 처리하기 위한 것
두번째는 인증 처리가 완료된 다음 홍길동 정보에 접근할 수 있는 권한을 받는 것
google api console
url: http://localhost:8080/login/oauth2/code/google
승인된 리다이렉션 url은 우리가 구글 로그인을 완료하면 구글 서버쪽에서 우리쪽으로 코드를 돌려준다. (인증이 되었다는 코드)
그러면 이 코드를 받아 우리는 엑세스 토큰을 요청한다.
이 엑세스 토큰을 받아서 사용자 정보에 접근할 수 있는 권한이 생긴다. 엑세스 토큰을 얻기 위해서 필요한 것이 코드이다. 이 코드를 받을 수 있는 주소를 적은 것이다.
예전 강의에서 카카오 로그인을 했을 때 처럼 직접적으로 다 구현하면 이 주소가 크게 의미가 없는데 우리가 oauth client 라는 라이브러리를 사용하게 되면 이 주소는 고정이다.
여기에 대한 컨트롤러 주소를 만들 필요가 없다. 무슨 말일까?
이런 주소가 있다면 컨트롤러에는
@GetMapping("login/oauth2/code/google")이라는 주소가 있어야 한다. 근데 이런 컨트롤러를 만들 필요가 없다.
왜나면 라이브러리가 알아서 다 처리해주기 때문이다.
처음에 spring starter project 에서 dependencies를 체크해줄 때 oauth2 가 있다. 그걸 체크해주면 되는데 우리는 처음에 체크를 안했음 ..
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
해당 코드를 pom.xml에 추가해주었다.
loginForm.html
<a href="/oauth2/authorization/google">구글 로그인</a>
정해진 주소를 넣어줌. 이 주소는 바뀌면 안된다. ㅠ!!
여기서 구글 로그인 버튼을 눌러주면
다음과 같은 404 에러가 발생한다. 이유는 해당 주소에 대해서 맵핑된게 아무것도 없기 때문이다. 따라서 config에다가 코드를 추가해준다.
SecurityConfig.java
.and() .oauth2Login() .loginPage("/loginForm");
그리고 구글 로그인을 클릭하면 다음과 같이 사용자 계정을 선택할 수 있는 화면이 뜬다.
하지만 여기서 구글 계정으로 로그인을 하면 403이 발생한다. 아직 세션이 없기 때문이다.
구글 로그인까지 다 해서 인증은 되었는데 우리의 서버쪽으로 인증이 되고 나서 후처리를 하지 않았다. 다음 시간에 마저 ...😚😚😚
[Reference]
이 글은 유투버 데어 프로그래밍의 스프링 부트 시큐리티 강좌를 바탕으로 정리한 내용입니다.