[Spring] OAuth2 기반 회원 인증 시스템 도입 (1) - 도입배경,이론

1. 도입배경

  • 프로젝트 진행 중, 사용자 편의를 위해 소셜 아이디로 간편하게 로그인할 수 있는 기능을 구현할 필요성을 느꼈습니다.
  • 많은 사이트에서 사용하는 OAuth 2.0 방식을 도입하여 보안성을 높이고 로그인 과정을 간소화하였습니다.

2. OAuth2

1) OAuth2 란?

  • OAuth 2.0은 사용자의 로그인 정보를 공유하지 않고도 애플리케이션이 외부 서비스에 안전하게 접근할 수 있게 해주는 인증 및 권한 위임 방식입니다.
  • Google, Naver, Kakao와 같은 플랫폼들이 이를 위한 API를 제공하고 있습니다..
  • OAuth 2.0에서는 사용자의 아이디와 비밀번호를 직접 다루지 않고 토큰 기반 인증을 통해 권한을 부여합니다

2) 왜 OAuth2를 쓰는가?

  • 보안성: 애플리케이션 데이터베이스(DB)에서 사용자의 아이디와 비밀번호를 직접 관리할 필요가 없어 보안 위협이 줄어듭니다.
  • 사용자 정보 최소화: 사용자는 이름, 이메일 등 최소한의 정보만으로 서비스를 이용할 수 있습니다. 이로써 개인 정보 노출이 최소화되며, 정보 유출 위험이 감소합니다.
  • 안전한 사용자 식별: OAuth 2.0에서는 서비스 제공자(예: Google, Naver 등)에서 부여한 사용자 고유 ID를 통해 사용자 식별이 가능하여, 클라이언트는 실제 이름이나 이메일등 민감한 정보를 외부에 노출하지 않고도 서비스 이용이 가능합니다..

3) OAuth2 로그인 다이어그램

  • 실제 프로젝트에선 Spring Security와 OAuth2 라이브러리를 결합하여 좀더 복잡하지만, 서블릿 필터같은 부분은 제외하고 최대한 간단하게 다이어그램을 나타내었습니다.

  1. 유저가 웹사이트에서 로그인버튼을 클릭합니다.
  2. WAS에서는 미리 설정해둔 Naver OAuth2 로그인 페이지로 클라이언트를 리다이렉트시킵니다.
  3. Naver서버에서는 URL 유효성을 판단한후, 로그인 페이지를 클라이언트에게 전달합니다.
  4. 클라이언트는 ID/PW를 입력하여 Naver 서버에 전송합니다.
  5. 유저 정보가 옳다면 Naver 서버는 미리 설정된 WAS URL로 엑세스 토큰을 전송합니다. 엑세스 토큰에는 유저정보가 들어있는게 아닌, 유저정보에 접근하기 위한 정보가 저장되어 있습니다.

  1. WAS는 미리 발급받은 엑세스 ID,key 와 유저정보 엑세스 토큰을 포함해 Naver 서버에 유저정보를 요청합니다.
  2. Naver 서버는 유효성 을 검사한 후 유저정보를 전송합니다. 이때 전송되는 정보는 개발자가 미리 설정된 값입니다.

  1. WAS는 받아온 유저 데이터를 처리한 후(DB 저장, 권한 부여등..) Session을 생성,저장하고 Session Cookie를 유저에게 전송합니다.