본문 바로가기

dev/스프링

Spring Boot OAuth2 로그인

스프링 부트에서 OAuth를 사용하여 소셜 로그인 기능 구현하는 방법입니다.

 

OAuth를 지원하는 서비스가 많은데 그중에서 네이버 로그인을 사용하겠습니다.

 

네이버 로그인 서비스 등록 화면

 

먼저 네이버 로그인 서비스가 등록되어 있어야 합니다.

 

등록이 끝나면 Client ID와 Client Secret가 생성되는데 이 키값들을 사용해 네이버 로그인 서비스를 통해 인증합니다.

 

OAuth 라이브러리 추가

 

pom.xml에 OAuth 라이브러리를 추가합니다.

 

application.propeties 파일

 

application.properties 파일의 1번째 라인을 보게 되면

 

스프링 프로필 환경 설정을 통해 다른 추가적인 설정을 할 수 있습니다.

 

지금 oauth로 되어있는데 이는 applicatoin-oauth.properties 파일에 있는 설정값들을 스프링 환경에 적용할 수 있습니다.

 

application-oauth.properties 파일

 

application-oauth.properties 파일에 대한 설명은 아래에서 확인하면 됩니다.

 

2~3라인: 앞에서 진행한 네이버 로그인 Client ID와 Client Secret 값

4라인: 네이버 OAuth 인증이 성공되면 네이버에서 리다이렉트 하는 URI

5라인: 네이버 OAuth 인가 유형

6라인: 어플리케이션에서 네이버 OAuth에 요청하는 권한 범위, 여기서는 이름과 이메일 요청

7라인: 클라이언트 이름

 

10라인: 네이버 OAuth 인가 엔드포인트, 사용자 인증 및 데이터 접근 허용 처리

11라인: 어플리케이션이 인가 코드를 교환하여 Access 토큰을 요청하는 URI

12라인: Access 토큰을 이용하여 사용자 정보 조회하는 URI

13라인: 사용자 정보의 이름 속성

 

User 엔티티

 

Role 열거형

 

사용자 정보를 저장하는 User 엔티티 클래스와 사용자 권한 Role 열거형을 정의합니다.

 

UserRepository

 

이메일로 사용자 엔티티를  조회하는 Repository 정의합니다.

 

CustomOAuth2Service

 

네이버 로그인 이후 가져오는 사용자 정보들을 DB와 세션에 저장하는 CustomOAuth2Service입니다.

 

loadUser 메소드는 properties 파일에 있는 속성을 이용하여 사용자 정보를 가져온 뒤

 

DB에 사용자 정보 저장하는 saveOrUpdate 메소드를 호출하고

 

세션에 사용자 정보를 저장합니다.

 

스프링 시큐리티 설정

 

스프링 시큐리티를 설정하는 SecurityConfig입니다.

 

기존 시큐리티와 달리 OAuth 로그인 설정하고 있습니다.(31~36라인)

 

해당 코드에 대한 자세한 설명은 아래에서 확인하면 됩니다.

 

31~36라인: 스프링 시큐리티에서 OAuth 로그인을 설정하고 있습니다.

32라인: OAuth 기반 로그인 설정을 구성합니다.

33~34라인: OAuth 로그인 성공 시 사용자 정보를 가져와서 작업하는 엔드포인트입니다.

                   앞에서 정의한 CustomOAuth2Service가 그 역할을 담당합니다.

36라인: OAuth 로그인 성공 핸들러를 지정합니다.

             아래에서 정의한 oauth2LoginSuccessHandler 메소드가 그 역할을 담당합니다.

40~46라인: OAuth 로그인 성공 핸들러, 로그인 성공 이후 "test.do"로 리다이렉트 합니다.

 

OAuth 로그인 결과

 

디버그 모드에서 OAuth 로그인을 실행하면 위와 같이 성공한 것을 확인할 수 있습니다.

 

해당 글에 대한 정보는 이동욱님의 스프링 부트 도서를 참고했습니다.

https://lib.seoul.go.kr/search/detail/CATTOT000001358798

 

상세정보 | 서울도서관

공유할 sns 선택하기 카카오톡 공유하기 네이버로 공유하기 트위터로 공유하기 페이스북 공유하기 카카오스토리 공유하기 --> URL 공유하기 복사 표지보기 상세보기 MARC보기 책꽂이에 저장 상세

lib.seoul.go.kr

 

'dev > 스프링' 카테고리의 다른 글

Spring Boot yml 외부 참조  (0) 2023.12.02
Spring Boot Session Store Type JDBC  (0) 2023.11.27
Spring WebSocketSession  (0) 2023.08.22
Spring Boot Jasypt  (0) 2023.08.14
Spring Naver Editor 이미지 업로드  (0) 2023.06.28