개요
프로젝트에서 구글 로그인 구현을 담당하게 되었습니다. 구현도 중요하지만 언제나 사용할 수 있는 지식으로 가공하기 위해서 구현에 가장 중요한 개념 중 하나인 OAuth 2.0에 대해 다뤄보도록 하겠습니다.
1. oAuth가 뭔데?
무신사 (온라인 패션 커머셜 기업) 의 로그인 페이지 일부를 캡쳐하였습니다.
우리는 종종 웹 사이트에서 위와 같은 카카오 로그인 처럼 외부 소셜 계정을 통한 회원 가입 및 로그인 기능을 쉽게 찾아볼 수 있는데요, 위 기능을 이용하면 번거롭게 아이디, 비밀번호를 설정하지 않아도 될 뿐더러 연결하는 소셜 계정에서 일부 정보를 가져와 간편하게 서비스를 이용할 수 있다는 장점이 있습니다.
이 때 이용하는 프로토콜이 바로 OAuth 인데요, OAuth는 Open Auth 즉, 인증 처리를 대신 해주는 프로토콜이라고 이해하면 되겠습니다. 위키백과는 OAuth를 다음과 같이 정의하고 있습니다.
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
예를 들어, 위의 무신사에서 카카오 로그인을 통해 회원 가입 및 로그인을 진행하였다면, 무신사 측에서는 카카오의 특정 자원을 접근 할 수 있는 권한을 부여받는 것이죠.
2.왜 OAuth를 쓰는가?
OAuth는 많은 이점이 존재합니다. 대표적으로 보안 상의 이점이 있는데 만약 우리가 OAuth가 없는 어떠한 평행 세계에 있다고 가정해 봅시다. 우리는 수 많은 웹 사이트에 자신의 정보를 가지고 회원 가입을 진행해야 할 것입니다. 이렇게 되면 자신이 이용하는 수 많은 웹 사이트는 내 자신의 개인 정보를 가지고 있게 되죠. 이렇게 많은 수의 웹 페이지에 내 정보가 담겨 있다면 그 만큼 개인 정보 노출의 위험이 커지게 됩니다. 대게 많은 수의 사용자들은 동일한 아이디와 비밀번호를 가지고 웹 사이트에 가입하기 때문입니다.
따라서 많은 수의 웹 사이트에서 내 정보를 관리하는 것 보다 특정한 곳에서 내 정보를 관리하는 것이 개인 정보 보안 상의 이점이 있습니다. 여기서 말하는 특정한 곳은 네이버, 카카오, 구글 등의 대기업 포털 사이트가 있습니다.
( 물론 단지 회원 가입이 귀찮아서 OAuth 기능을 사용할 수 있지만, “그것이 OAuth의 전부” 라고 묻는다면 단호하게 “그렇지 않다” 라고 답할 수 있습니다.)
3. OAuth는 어떻게 작동하는가?
OAuth의 작동 방식은 다음과 같습니다.
1.
사용자는 서버에 로그인을 요청을 합니다.
2.
서버는 사용자에게 로그인 페이지를 응답합니다.
3.
사용자는 카카오 로그인을 클릭하여 소셜 로그인을 통한 로그인을 하고자 합니다.
4.
사용자는 인증 서버에 로그인합니다.
5.
사용자가 로그인에 성공하면, 인증 서버는 클라이언트 애플리케이션에 대한 인증 코드를 발급합니다.
6.
클라이언트 애플리케이션은 발급받은 인증 코드와 함께 인증 서버에 액세스 토큰을 요청합니다.
7.
인증 서버는 클라이언트 애플리케이션에 액세스 토큰을 발급합니다.
8.
클라이언트 애플리케이션은 액세스 토큰을 사용하여 보호된 리소스에 접근합니다.
이러한 방식으로 OAuth는 클라이언트 애플리케이션이 사용자의 비밀번호를 알 필요 없이 인증 및 인가를 처리할 수 있게 해줍니다. 또한, 사용자는 자신의 로그인 정보를 안전한 인증 서버와 공유하고, 클라이언트 애플리케이션은 사용자의 리소스에 대한 권한을 부여 받을 수 있습니다.
4. OAuth의 한계는 무엇인가?
OAuth는 각 서비스 제공자마다 유저 정보에 대한 표준이 없기 때문에, 유저 데이터를 전달하는 방식이 각기 다르다는 점에서 어려움이 있습니다. 이로 인해 클라이언트 애플리케이션은 각 응답에 대해 개별적으로 대응해야 하는 불편함이 존재합니다.
Google
Kakao
Naver