Spring Security OAuth 적용하기

OAuth 2.0 이란?

OAuth란 Open Authorization의 약자로 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜입니다.
제3의 앱(내가 만든 애플리케이션)이 자원의 소유자인 서비스 이용자를 대신하여 서비스(구글, 네이버, 카카오 등)를 요청할 수 있도록 자원 접근 권한을 위임하는 방법입니다.
즉, 어떤 서비스를 이용할 때 페이스북이나 구글 아이디로 회원가입이 가능한 것을 떠올리면 됩니다.
사용자에게 인증을 제공하지만 주된 목적으로는 인증된 사용자의 이름이나 이메일을 가져오는 등의 권한을 제공해줍니다.

img.png

  1. 제3의 서비스는 사용자로부터 Authorization code를 받습니다.
  2. 제3의 서비스는 Authorization Server(네이버의 인증 서버)에게 Authorization code로 Access Token을 발급받습니다.
  3. 제 3의 서비스는 Access Token으로 Resource Server(네이버의 자원 서버)에게 자원을 요청합니다.
  4. 사용자에게 제공합니다.

Authorization Code Grant 방식이 안전한 이유

Client Application에게 access token을 넘겨주는 방식이 아니라 Authorization Code를 넘겨줍니다. 그리고 백엔드에게 Authorization Code를 넘겨주고 허가된 리소스 요청을 받습니다. 즉, Access 토큰을 백엔드에서 관리하기 때문에 탈취당할 위험이 사라집니다. 예를들어 Implicit 방식이 존재하는데 이는 Access Token을 Front-end에서 관리하기 때문에 보안적 위험성이 더 커집니다.

Front-end 역할

  • OAuth 서버로 로그인 요청 후, Authorization code를 발급받아 백엔드에 전달

Back-end 역할

  • Authorization code로 OAuth 서버에 Access Token 요청
  • Access Token으로 이름, 이메일 등의 정보 요청
  • DB에 존재하지 않는 유저라면 새로 등록, DB에 존재하는 유저라면 정보 업데이트
  • 이후 Front-end에게 Access Token과 Refresh Token을 반환한다.

정리하자면 Front-end에서 네이버나 구글 인증 서버(Authorzation Server)에게 사용자가 로그인을 하고난 후 Authorization Code를 받고나서, Back-end에게 Authorization Code가 맞는지 확인 요청합니다. 맞으면 Access Token을 가지고 네이버나 구글의 Resource Server에 정보를 요청합니다.

참조

댓글남기기