프로젝트에 소셜로그인을 도입하기로 했다.
언젠가는.. 공부해야했던 일..😇 이참에 자주 사용할만한 소셜로그인들을 도입하면서 공부해보기로 했다.
프로젝트에는 google, kakao, naver, github 정도를 구현 할 생각이지만, 다른 소셜로그인 기능을 구현하게 되면 추후에 추가해서 포스팅 하도록 하겠다.
해당 포스팅의 OAuth는 2.0을 기준으로 설명하고 있다.
OAuth가 무엇인지 아는 당신! 소셜로그인 구현이 쉽다고 생각하는 당신! 좋겠다..
그렇다. 나는 몰랐다. 소셜로그인이 작동하는 원리에 대해 아예 모르고 있었는데 OAuth에 대해 공부하면서 득도 수준으로 OAuth를 낱낱히.. 공부했다..
구현을 하는것도 좋지만 어떤 원리이기에 이렇게 구현해야하는지 알고 하는 것이 좋으니 함께 알아보자!🔥
위키백과에서는 OAuth를 다음과 같이 정의하고 있다.
OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
위의 정의가 이해가 되지 않아도 괜찮다. 우선 가정을 해보자.
만약 OAuth가 없다면 소셜로그인을 어떻게 구현할 수 있을까? 유저는 서비스에 소셜 서비스에 대한 아이디와 비밀번호를 제공하고, 해당 서비스는 그것을 기억했다가 소셜로그인에 접근하는 방법이 좋을까? 사실 이러한 방법은 보안상의 문제가 충분히 발생할 수 있기 때문에 좋지 못하다. 유저 또한 신뢰할 수 없는 서비스에 아이디와 비밀번호를 제공하기가 껄끄러울 것이다.😅
지금의 소셜로그인 방식은 유저가 ID와 비밀번호를 입력했을 시에 accessToken을 소셜 플랫폼에서 제공하고 우리는 해당 Token을 OAuth를 통해 획득해서 데이터를 가져오고, 입력, 생성, 수정, 삭제 하는 등의 업무를 진행할 수 있게 된다. OAuth는 비단 로그인 뿐만 아니라 요청한 서비스에 접근해서 사용이 가능하다!
OAuth에 등장하는 구성원들의 용어를 정의하자면 다음과 같다.
우리가 제어하고자 하는 자원을 가지고 있는 사람
데이터를 가지고 있는 서버
access token을 발급해준다.
예) 구글, 페이스북, 네이버, 카카오 ...
인증과 관련된 처리를 전담하는 서버
인가 코드를 발급해준다.
자원의 소유자
즉, 소셜로그인을 하려고 하는 유저를 일컫는다.
Resource Server에 접속해서 정보를 가지고 가는 Client
즉, 소셜로그인을 사용하려고 하는 플랫폼을 일컫는다.
PAYCO에 OAuth에 대한 인증과정 설명이 아주 자세하게 잘되어있어서 이미지를 가져왔다.
우선 플랫폼 즉, Client에서 소셜로그인 등등의 OAuth 관련 인증을 요청하면 Resource Server와 Authorization Server에서 일련의 과정을 거친 다음 Access Token을 발급해준다. 그러면 Client에서는 해당 Access Token을 저장한 후 인증을 완료한다.
이후 Access Token을 이용해서 서비스를 요청하면 API를 호출하여 해당 Token이 유효할 시 필요로 했던 서비스를 유저에게 제공해준다.
자 아직도 무슨 말인지 모르겠는 사람들을 위해 열심히 그림을 그려왔다...!
(혹시 틀린 내용이 있다면 댓글로 정정 부탁드립니다!)
모든 과정은 이미 OAuth를 요청할 서비스에 어플리케이션을 등록한 이후에 시행되어야한다.
이렇게 말로 하는 것 보다 직접 구현해본다면 조금 더 와닿을 것이다. (나도 그랬다!)
다음에는 구글부터 어떻게 소셜로그인을 구현하는지 알아보자.✊