토이 프로젝트를 하던 중, 소셜 로그인의 작동 방식이 궁금해졌고, 프로젝트에 한 번 넣어보고 싶어졌다. 물론 프론트엔드만으로 진행하는 프로젝트이기에 실제 서비스처럼 구현하진 못하지만. 카카오 소셜 로그인을 통해 사용자의 이메일까지 받아오는 것을 목표로 하였다.
애플리케이션 인증을 위한 접근 권한 개방형 표준 프로토콜.(Open Standard for Authorization)
API 허가(Authorize)를 목적으로 JSON(JavaScript Object Notation) 형식으로 개발.
쉽게 풀어서 얘기해보면
A서비스를 이용하는 사용자가A서비스에게B서비스가 갖고있는 자신의 개인정보를 동의한 범위 내에서 일부 접근 권한을 부여하여,A서비스를 통해B서비스 일부를 이용할 수 있게 하는 프로토콜이다.
개방형 프로토콜이란? 스택이 표준화되었거나 공개적으로 사용이 가능한 프로토콜
ex) 카카오, 구글 등 플랫폼 소셜 로그인
1.0과 2.0은 서로 다른 프로토콜이고 호환도 되지 않는다. 1.0은 비공식 논의체에 의해 만들어졌고, 시간이 흐르면서 이를 지지하는 사람들이 생기며 IETF 표준 프로토콜로 발표가 되었다.
OAuth1.0은 인증절차가 복잡하고, 웹 어플리케이션 이외에는 사용을 할 수 없었고 보안도 취약했다.
이것들을 모두 개선한 것이 OAuth2.0이다.(좀 더 찾아보니 이미 2012년도부터 OAuth 2.0이 드래프트 단계였음에도 많은 회사들이 OAuth2.0을 채택했다고 한다.)
ex) 회사 사원증, 외부 고객 방문증, 주민등록증 등...
ex) 보통의 서비스들을 생각해보면 관리자의 권한, 일반 유저의 권한이 다르다.
Resource User가 정보제공을 동의하고 ID/PW를 입력할 경우, Authorization server가 Authorization code를 queryString에 포함시켜 redirect해줄 uri.
Client가 Resource Server에 서비스 등록- Resource Server와 Client는 `Client ID, Client Sercret, redirect URL`을 알게 된다.
Resource Owner가 로그인 요청 후,=> `Client_ID, scope, redirect_uri`를 Authorizatoin Server에 전달.
Authorization Server가 전달 받은 redirect_uri로 queryString에 Authorization Code를 포함시켜서 리다이렉트.Client가 전달받은 Authorization code를 사용해 Access Token요청.Authorization Server가 Client에게 Access Token 전달.Client는 Access Token을 이용해 접근 가능한 정보들에 대해 필요에 따라 요청.Resource Server에서 Client가 요청한 자원 전달