네 구글 로그인이 안전한 이유, 사실은 OAuth 덕분이지

OAuth (1).png

 

구글이나 소셜 계정으로 로그인하는 건 정말 편리하죠! 그런데 문득 궁금해졌습니다.
"내 비밀번호를 외부 사이트에 알려주지 않아도 로그인이 되는 이유는 뭘까?"

찾아보니, 그 답은 바로 OAuth라는 기술이었습니다.
이번 글에서는 OAuth가 어떻게 작동하는지, 그 원리를 제가 보기 편하게 정리해 보겠습니다.


" 인증과 인가 "

  1. 인증(Authentication)
    : 인증은 사용자가 누구인지 확인하는 과정입니다.
    예를 들어, 로그인 화면에서 ID와 비밀번호를 입력해 본인임을 증명하는 것이죠.
    인증이 성공하면, 서비스는 "이 사람은 OOO다"라고 신원을 확인합니다.
  2. 인가(Authorization)
    : 인가란 인증된 사용자가 어떤 권한을 가지는지 결정하는 과정입니다.
    예를 들어, "OOO 사용자가 특정 파일에 접근하거나 데이터를 수정할 수 있는 권한을 부여받는 것" 같은 거죠.
    즉, 인증이 끝난 후에 "이 사람은 OOO 데이터를 사용할 권리가 있다"고 허용하는 과정이에요.


01


OAuth란?

OAuth는 간단히 말해, 구글이나 페이스북 같은 소셜 계정을 이용해 로그인할 수 있게 해주는 기술입니다.
OAuth의 핵심은 내 비밀번호를 외부 서비스(구글, 페이스북 등)와 직접 공유하지 않아도 된다는 점이에요.
그리고 OAuth는 인증이 아닌 '인가(Authorization)'를 위해 만들어진 기술입니다.

 

 

" 쉽게 비유하자면 "

OAuth는 호텔 프런트 데스크에서 받는 임시 카드키와 비슷합니다.

  • 카드키는 특정 시간에만 유효하고, 만료되면 새로 발급받아야 한다는 점에서 액세스 토큰과 비슷해요.
  • 내가 머물 방(구글 계정 정보)에 들어가려면 카드키(권한)가 필요합니다.
  • 이 카드키로 엘리베이터나 방에 들어갈 수는 있지만,
    호텔 전체를 열 수 있는 **마스터키(내 비밀번호)**는 받을 수 없습니다.

즉, OAuth는 필요한 권한만 부여하고, 비밀번호는 안전하게 숨겨두는 기술이에요! 😊

 

OAuth 1.0과 2.0의 차이

현재 대부분의 서비스는 OAuth 2.0을 사용합니다.
기존 OAuth 1.0은 보안을 위해 복잡한 암호화 방식을 사용했지만, 사용하기가 어려웠어요.
반면, OAuth 2.0은 Access Token이라는 간단한 "열쇠"를 사용해 인증과 권한을 더 쉽고 편리하게 관리합니다.

또한, OAuth 2.0은 웹, 모바일 앱, IoT 환경 등 다양한 플랫폼에서 사용하기 적합하게 설계되었습니다.

이처럼 OAuth 2.0은 더 단순하고 유연해서 요즘 대부분의 서비스가 기본으로 사용하고 있습니다.


02

OAuth는 어떻게 동작할까?

OAuth의 과정은 크게 4단계로 나뉩니다.

 

1단계: 사용자가 요청

사용자가 웹사이트(서비스 A)에서 "구글 계정으로 로그인" 버튼을 클릭합니다.
웹사이트(서비스 A)는 "이 사용자에 대한 정보를 구글에게 요청해야겠군!" 하고 요청을 준비합니다.

 

2단계: 권한 요청

웹사이트는 구글에 **"이 사용자가 우리 서비스를 이용할 수 있는 권한을 주세요!"**라고 요청합니다.
이때 사용자는 "어떤 정보에 접근하도록 허용할지" 동의 창을 확인하게 됩니다.
예를 들어, 이메일 주소, 프로필 정보 등에 대한 접근 권한이 요청될 수 있습니다.

 

3단계: 토큰 발급

사용자가 동의하면, 구글은 웹사이트에게 **액세스 토큰(Access Token)**을 발급합니다.
이 토큰은 사용자의 정보를 가져올 수 있는 "임시 카드키" 역할을 합니다.

 

4단계: 인증 완료

웹사이트는 이 액세스 토큰을 사용해 구글로부터 사용자 정보를 가져옵니다.
이제 사용자는 웹사이트에서 로그인 상태로 이용할 수 있게 됩니다.

 

이 모든 과정에서 사용자의 비밀번호는 절대 노출되지 않습니다.

 

OAuth 작동순서도.png


03

OAuth의 장점과 단점

장점

  1. 비밀번호 노출 위험 감소
    : 비밀번호를 외부 사이트와 직접 공유하지 않아도 됩니다.
    예를 들어, 구글 계정을 사용하면 여러 사이트에 비밀번호를 공유하지 않아도 안전하게 인증할 수 있어요.
  2. 편리한 사용자 경험
    : 구글, 페이스북 계정만 있으면 여러 사이트에 쉽게 로그인할 수 있습니다.
  3. 보안 강화
    : 액세스 토큰에는 유효 기간이 있어서 만료되면 다시 발급받아야 합니다.

단점

  1. 액세스 토큰 유출 위험
    : 액세스 토큰이 탈취되면, 누군가 내 계정 정보에 접근할 수 있습니다.
    따라서 토큰 관리가 매우 중요합니다.
  2. 복잡한 구현 과정
    : 개발자가 OAuth를 적용하려면 다소 복잡한 설정이 필요합니다.
  3. 서비스 종속성 
    : 특정 외부 서비스(구글, 페이스북 등)에 의존하게 될 수 있습니다.

04

정리

OAuth는 사용자의 비밀번호를 안전하게 보호하면서도, 편리한 로그인 경험을 제공하는 훌륭한 기술입니다.
다만, 액세스 토큰 관리와 같은 보안 요소는 철저히 신경 써야 하죠.
개발자와 사용자 모두에게 유용한 이 기술이, 앞으로 더 다양한 서비스에 적용되기를 기대해 봅니다. 😊