본문 바로가기
백엔드 개발

OAuth 2.0 개념

by browoo97 2022. 5. 5.

여러 사이트에 회원가입하게 되면 나의 개인정보가 여러곳에 노출된다.

수많은 사이트에 퍼져있는 것보단 한곳에서 나의 개인정보를 관리하는 것이 보안에 좋다고 생각함.

 

 

-대형 포털 사이트가 관리 (ex. 네이버, 카카오)

개인정보 노출을 막기 위해 여러 사이트를 관리하는 것보단 나의 개인정보를 큰 대형 포털사이트에만 입력하고 그곳에서 제대로 보안을 하게되면 개인정보 노출 우려가 줄어든다.

하지만 대형 포털 사이트 자체가 노출이 되면 모든 사이트가 노출된다는 단점이 존재한다.

→ 이후 빠르게 대형 포털 사이트의 로그인 정보만 수정하면 노출를 빨리 막을 수 있다는 장점도 존재함.

 

 

-OAuth 흐름

  1. 로그인페이지에서 일반 로그인이 아닌 OAuth 로그인 버튼을 선택
  2. 대형 포털 사이트 아이디로 로그인 요청 (대형 포털 api 서버)
  3. 정상적인 로그인이라면 redirect로 콜백을 해줌. 이 때 code를 반환함.
  4. 이 code 포함하여 다시 대형 포털 api 서버에 request 요청을 보내면
  5. 포털 api 서버는 자원 서버(DB서버)에 접근할 수 있는 AccessToken을 반환함.
  6. 이번엔 이 AccessToken을 포함하여 자원서버에 request 요청
  7. 자원 서버는 해당 유저의 개인정보를 반홤해줌
  8. spring 서버는 이 유저가 기존 회원이면 로그인 처리, 신규 회원이라면 회원가입 처리와 로그인 처리를 실행함.

 

스프링에선 이러한 OAuth를 공식적으로 지원해주는 사이트가 존재한다.

→ 공식적으로 지원해주는 OAuth 주체 - facebook, google

→ OAuth-Client 라이브러리 사용! → 로그인 인증과, 권한 처리 생략해줌

 

라이브러리를 이용하면 3,4,5,6 을 생략할 수 있다. code를 api서버에 요청하고 AccessToken을 받고 다시 자원서버에 요청하는 로직을 라이브러리가 대신 수행해준다.

 

 

-라이브러리 추가

 

SecurityConfig 클래스 → oauth 로그인을 사용하고 개인정보 응답을 oAuth2DetailsService로 받음.

 

OAuth2DetailsService → 리턴값이 OAuth2User

-PrincipalDetails 클래스

OAuth2User를 상속 받은 새로운 클래스를 생성할 수 있지만 시큐리티 세션에 로그인 방식에 따라 다른 클래스가 저장된다.

  1. 일반 로그인 시 → PrincipalDetails
  2. OAuth 로그인 시 → OAuth2User를 상속받은 새로운 클래스

두 가지의 경우의 수로 저장이 되기 때문에 controller 단에서 두개를 구분하는 로직이 추가적으로 필요!

→ 때문에 PrincipalDetails에 추가적으로 OAuth2User를 상속받아 공통으로 시큐리티 Authentication으로 사용!

 

 

기타  참고 자료

'백엔드 개발' 카테고리의 다른 글

도커 실행, 종료, 이미지 레이어  (0) 2022.09.19
Docker 란  (0) 2022.09.16
SSE 프로토콜을 활용한 채팅서버  (0) 2022.05.15
JWT 토큰  (0) 2022.03.29
업로드 폴더 위치  (0) 2022.03.24

댓글