실전 프로젝트를 진행하면서 이번에는 일반 회원가입/로그인이 아닌 카카오 소셜로그인을 구현하게 되면서 OAuth에 대해 공부하게 되었다.
OAuth를 왜 쓸까? 하고 생각해보기 전에 네이버 로그인이나 카카오 로그인을 왜 사용할까? 네이버 로그인이나 카카오 로그인을 쓰는 데에는 여러가지 이유가 있을 수 있다. 나의 경우에는 유저들에게 회원가입/로그인을 쉽게 제공하기 위해 이번 프로젝트에서 카카오 소셜로그인을 구현했다.
그렇다면 내가 만든 사이트에서 카카오 소셜로그인을 사용하려는 유저가 카카오톡을 사용하는 사람인지는 어떻게 알 수 있을까?? 이걸 해결하기 위해 OAuth가 생겼다.
OAuth 방식이 등장하기 전에는 인증방식의 표준이 없었기 때문에 기존의 기본인증인 id
와 password
를 사용하였었다
id와 password를 직접 입력받아 저장하여 필요할 때마다 불러와서 사용을 해야 했는데, 이런 방식을 사용하게 되면 다음과 같은 문제가 발생할 수 있다
위와 같은 문제를 해결하기 위해 2006년 11월 트위터 개발자와 Ma.gnolia의 개발자가 안전한 인증방식에 대한 논의를 하면서 OAuth가 등장했고,
2007년 10월 3일, OAuth 코어 1.0의 최종 초안이 발표되었다.
현재는 OAuth 1.0a를 거쳐 OAuth2.0이 많이 사용되고 있다
Resource Server | OAuth 2.0 서비스를 제공하고, 자원을 관리하는 서버 (Facebook, Google, Twitter 등이 이에 속한다) |
Resource Owner (자원 소유자) | Resource Server의 계정을 소유하고 있는 사용자 (사용자) |
Client | Resource Server의 API를 사용하여 데이터를 가져오려고 하는 사이트 (내가 만든 사이트) |
Authorization Server (권한 서버) | Client가 Resource Server의 서비스를 사용할 수 있게 인증하고 토큰을 발행해주는 서버 (인증 서버) |
A. Client 측에서 Resource Owner에게 인증방식 4가지 중 하나로 승인을 요청한다
B. Resource Owner 측에서 Client 측으로 인증 권한을 부여한다
C. Client는 부여받은 인증 권한으로 Authorization Server에 Access Token
을 요청한다
D. Authorization Server에서 Client와 부여 받은 인증 권환에 대한 유효성을 검사 후 통과하면 Access Token
을 부여한다
E. Client는 받아온 Access Token
을 이용하여 Resource Owner의 Resource에 접근을 요청한다
F. Resource Server는 해당 Access Token
의 유효성을 검사한 후 통과하면 요청에 대한 Resource를 Client에게 넘겨준다
비교 | OAuth1.0 | OAuth2.0 |
---|---|---|
참여자구분 | 이용자 소비자 서비스 제공자 | 자원 소유자 클라이언트 권한 서버 자원 서버 |
토큰 | 요청 토큰 (Request Token) 접근 토큰 (Access Token) | 접근 토큰 (Access Token) 재발급 토큰 (Refresh Token) |
유효기간 | 접근 토큰의 유효기간 없음 | 접근 토큰 유효기간 부여 만료 시 재발급 토큰 이용 |
클라이언트 | 웹 서비스 | 웹, 앱 등 |
이렇게 OAuth를 통해 내가 만든 사이트를 사용하려는 유저가 자신의 카카오 계정과 비밀번호를 우리 사이트에 알려주지 않아도, 카카오에 있는 유저의 정보를 내가 만든 서비스에서 안전하게 사용할 수 있다.
https://datatracker.ietf.org/doc/html/rfc6749
https://doqtqu.tistory.com/295#toc-%C2%A0OAuth(Open%20Authorization)%EB%9E%80?%C2%A0
https://programmer93.tistory.com/52