쉽게 이야기하여 소셜로그인을 구현하기 위한 프로토콜이다.
여러 서비스에서 흔히들 보는 ‘구글로 로그인’, ‘네이버로 로그인’.. 등등 말이다.
간단하게 구글로 로그인을 구현해보며 어떻게 이를 구현할 것인지 확인해보자.
우선 구글 API를 등록해줘야 OAuth를 활용할 수 있다.
Google Cloud에 들어가 왼쪽 상단에 보이는 셀렉트 바를 눌러주면 아래와 같은 화면이 뜬다.
여기서 빨간 동그라미가 그려진 ‘새 프로젝트’ 버튼을 눌러준다.
프로젝트 이름은 아무렇게나 지어주면 된다.
나는 편의상 oauth-recap이라고 지었다.
그러면 이처럼 프로젝트가 생성된 것을 볼 수 있다.
프로젝트 선택을 눌러보도록 하자.
그러면 이런 창이 나온다. 여기서 API 및 서비스를 눌러주도록 하자
사진에 적힌 숫자 순서대로 설정을 해주도록 한다.
우선 OAuth 동의 화면으로 가본다.
OAuth를 사내 API용이 아니라 실사용자가 사용할 API에 적용해주는 것이니 외부로 선택해준다.
그러면 이 사진처럼 막 뜨는데 필요한 항목에만 재량껏 채워넣어주자
그 뒤에 여러 항목이 뜨는데 이것도 재량껏 필요하면 넣어주면 된다.
저장후 계속을 눌러 완료를 지어주자.
그 다음으로 볼 것은 사용자 인증 정보다.
동그라미가 그려진 사용자 인증 정보 만들기 버튼을 누른다.
거기에서 ‘OAuth 클라이언트 ID’를 선택한다.
애플리케이션 유형과 이름은 알아서 채워넣도록 하자.
중요한건 아래에 있는 ‘승인된 리디렉션 URI’이다.
앞에 있는 도메인은 그냥 자유인데, 뒤의 ‘/login/..~~’부분은 고정이다. 무조건 이런식으로 적어줘야한다.
설정을 완성하면 이 모습이 나온다. 클라이언트 ID와 클라이언트 보안 비밀번호는 따로 복사를 해두도록 하자.
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
build.gradle을 열어서 위와 같은 라이브러리를 추가해준다.
spring:
#...
security:
oauth2:
client:
registration:
google:
client-id: 클라이언트 ID
client-secret: 클라이언트 보안 비밀번호
scope:
- email
- profile
yml에 security 관련으로 해서 저렇게 넣어준다.
아까 복사해뒀던 클라이언트 ID, 클라이언트 보안 비밀번호를 넣어준다.
//SecurityConfig.java -> filterChain 메서드
...
.oauth2Login(httpSecurityOAAuth2LoginConfigure -> {
httpSecurityOAAuth2LoginConfigure.loginPage("/loginForm");
})
...
filterChain
메서드에 위와 같이 추가해준다.
<a href="/oauth2/authorization/google">구글 로그인</a>
OAuth2Client 라이브러리를 사용한다면 위와 같은 링크는 강제적이다. 반드시 저 링크로 해야만 제대로 된 요청을 받을 수 있다.
실제 클라이언트 측에서 해당 링크를 눌러주면 다음과 같이 리다이렉션 된다.
여기까지하면 로그인이 잘 된다! 이제부터 로그인이 완료된 후의 후처리를 넣어주도록 해보자.
일반적으로 OAuth를 활용하면 다음과 같이 작동한다.
구글 OAuth 같은 경우는 1번 프로세스가 생략되고 Access Token + 사용자 프로필 정보를 바로 받는다.
후처리부터는 다음 포스트에서 기록하도록 한다.