구글,카카오로 로그인은 어떻게 동작할까? OAuth 쉽게 이해하기
새 서비스에 가입하려다 보면 구글로 계속하기, 카카오로 시작하기 같은 버튼을 만납니다. 누르면 새 비밀번호를 만들지 않고도 금세 로그인이 됩니다. 그런데 이 서비스가 내 구글 비밀번호를 알게 되는 걸까요? 다행히 그렇지 않습니다.
이번 글에서는 소셜 로그인이 어떻게 동작하는지, 그 바탕에 있는 OAuth라는 방식을 코드 없이 풀어 보겠습니다.
소셜 로그인은 비밀번호를 넘겨주지 않습니다 #
소셜 로그인의 핵심부터 말하면, 가입하려는 서비스는 내 구글 비밀번호를 절대 보지 못합니다. 비밀번호는 오직 구글에만 입력되고, 서비스에는 전달되지 않습니다.
대신 구글이 그 서비스에게 이 사람은 우리가 확인한 그 사람이 맞다고 보증해 줍니다. 서비스는 비밀번호를 직접 받아 확인하는 대신, 믿을 만한 구글의 보증을 받아 로그인을 처리하는 것입니다. 내 비밀번호를 새 서비스마다 여기저기 알려 주지 않아도 되는 이유가 여기 있습니다.
출입증을 대신 받아 오는 방식입니다 #
이 보증을 주고받는 약속이 OAuth입니다. 호텔에 비유하면 가깝습니다. 호텔 프런트에 신분증을 보여 주면, 프런트는 내 신분증 자체를 객실 청소부에게 넘기지 않습니다. 대신 객실 문을 열 수 있는 카드키를 내줍니다. 청소부는 그 카드키로 정해진 방에만 들어갈 수 있을 뿐, 내 신분증 정보를 갖지는 않습니다.
소셜 로그인도 같습니다. 신분 확인은 구글이라는 프런트에서 이뤄지고, 서비스는 그 결과로 일종의 카드키에 해당하는 토큰을 받습니다. 앞서 로그인 유지에서 토큰이 출입증 역할을 한다고 했는데, 소셜 로그인은 그 출입증을 구글에게서 대신 받아 오는 셈입니다.
동의 화면이 핵심입니다 #
소셜 로그인 버튼을 누르면 구글이나 카카오의 화면으로 넘어갑니다. 비밀번호를 입력하는 곳이 바로 여기, 즉 구글의 화면입니다. 가입하려는 서비스의 화면이 아닙니다. 이 구분이 소셜 로그인이 안전한 까닭의 핵심입니다.
이때 이 서비스에 이름과 이메일을 제공하는 데 동의하느냐고 묻는 화면이 함께 뜹니다. 무엇을 넘겨줄지 내가 확인하고 허락하는 단계입니다. 서비스는 내가 동의한 범위의 정보만 받아 갈 수 있습니다. 그래서 어떤 서비스는 이름과 이메일만, 어떤 서비스는 더 많은 권한을 요청하는 차이가 생깁니다.
무엇을 얻고 무엇을 못 얻나 #
서비스가 받는 것은 토큰과, 내가 동의한 범위의 정보뿐입니다. 보통 이름과 이메일 정도입니다. 토큰이 있다고 해서 내 구글 계정 전체를 들여다볼 수 있는 것은 아닙니다. 동의한 범위를 벗어난 일은 할 수 없습니다.
게다가 이 허락은 나중에 거둬들일 수 있습니다. 구글 계정 설정에 들어가면 그동안 연결한 서비스 목록이 있고, 그중 원하는 것의 연결을 끊을 수 있습니다. 연결을 끊으면 그 서비스의 토큰은 더 이상 통하지 않습니다. 열쇠를 내준 뒤에도 언제든 그 열쇠를 무효로 만들 수 있는 셈입니다.
그래서 소셜 로그인을 쓸 때 #
소셜 로그인은 편리하지만 함께 볼 점도 있습니다. 가입과 로그인이 빠르고, 서비스가 비밀번호를 보관하지 않아도 되니 유출 위험이 줄어듭니다. 반면 그 구글이나 카카오 계정에 문제가 생기면, 거기에 묶인 서비스들에도 한꺼번에 못 들어가게 될 수 있습니다.
만드는 쪽이라면 꼭 필요한 정보만 동의받는 것이 좋습니다. 과하게 많은 권한을 요청하면 사용자가 가입 단계에서 망설입니다. 그리고 이 모든 과정은 HTTPS 암호화가 적용된 통신 위에서 이뤄져야 안전합니다.
왜 비개발자가 알면 일이 편해지는가 #
- 안전한 까닭을 압니다. 비밀번호가 서비스가 아니라 구글에만 입력된다는 점을 알면, 소셜 로그인이 왜 비교적 안전한지 사용자에게 설명할 수 있습니다.
- 권한 범위를 설계합니다. 동의 화면에서 요청하는 정보가 많을수록 가입을 망설인다는 점을 알면, 꼭 필요한 범위만 요청하도록 정할 수 있습니다.
- 의존 위험을 봅니다. 외부 계정에 묶이는 구조임을 알면, 자체 로그인도 함께 둘지 같은 결정을 미리 가늠할 수 있습니다.
마무리 #
오늘은 소셜 로그인이 내 비밀번호를 서비스에 넘기지 않고, 구글의 보증을 토큰이라는 출입증으로 대신 받아 동작한다는 점을 살펴봤습니다. 비밀번호는 구글에만 입력되고, 서비스는 내가 동의한 범위의 정보만 받으며, 그 연결은 나중에 끊을 수 있다는 것이 핵심입니다.
토큰이 어떻게 출입증 역할을 하는지 궁금하다면 로그인하면 왜 계속 로그인 상태로 있을까를, 이 과정을 떠받치는 HTTPS와 암호화가 궁금하다면 주소창의 자물쇠는 무엇을 지키는가를 함께 읽어 보시길 권합니다.