OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
OAuth 가 무엇인지에 대한 위키백과의 정의는 위와 같습니다. 쉼표 이전은 크게 어렵지 않은데 쉼표 이후가 갑자기 대체 무슨 소리인가 싶기도 하네요.
하지만 개념을 몰라도 우리는 이미 일상 생활에서 충분히 이 기능을 활용하고 있습니다. 소셜 로그인이 OAuth 의 사례이기 때문이죠. 카카오톡이나 네이버, 구글, 페이스북 등을 이용해 전혀 다른 웹에서도 신규 가입 없이 로그인을 하고 웹 내부의 기능을 활용할 수 있는 것은 바로 이러한 OAuth 라고 하는 기술 덕분입니다.
위에서 설명한 소셜 로그인 인증 방식은 OAuth 2.0 이라는 기술로 구현되고 있습니다. 한국어 위키백과에는 번역이 되어있지 않지만 영어판에 내용이 실려있으니 관심이 생기시면 참고해보실 수 있겠습니다. 참고로 OAuth2.0 은 OAuth1.0 과 역호환되지 않는다고 합니다.
어떤 웹사이트를 이용하기 위해 카톡으로 소셜 로그인을 진행했다고 하면, 사실 유저 입장에서는 매우 간단하고 빠르게 진행이 가능하지만 그 이면에서는 많은 과정이 오고가게 됩니다. 오늘 공부를 통해 그 흐름을 조금이나마 알 수 있었는데요. 생각보다는 과정이 복잡한 관계로 한 번 풀어내어 정리해볼까 합니다. (늘 그렇지만 배우는 과정 중에 정리하는 것이니 정확한 내용은 꼭 다른 자료를 비교하시고 교차로 검증해보시기 바랍니다.)
'eensungkim'(
resource owner)이 크롬(client)으로 어떤 웹을 이용하기 위해 네이버(authorization server)로 소셜 로그인을 진행합니다.
이 때 크롬은 먼저 네이버 측에 'eensungkim'이 권한이 있는지를 확인할 코드(
authorization code)를 요청하게 되죠.소셜 로그인을 진행해 'eensungkim' 이 회원이라는 것을 확인한 네이버는, 크롬에서 자동으로 새로운 웹페이지로 이동하게 하면서(
redirect uri를 통해)authorization code를 전달합니다.웹의 서버(
resource server)는 받은authorization code를 다시 네이버로 보내access token을 요청합니다.네이버에서는
access token을 웹서버에 전달합니다.웹의 서버는 네이버로부터 전달받은 'access token' 을 클라이언트에 전달합니다.
아마도 추후에 수정을 많이 해야할 듯 합니다만 일단 제가 이해한 흐름은 여기까지입니다.
사용자의 정보를 가지고 있는 대형 웹서비스(네이버나 구글 등)에게 사용자의 인증을 대신 맡기고, 접근할 수 있는 권한을 담은 토큰을 발급받아 이 토큰을 통해 정보를 주고 받는다는 것이 OAuth2.0 에서 아주 중요한 점이라고 하는데요. 편리할 뿐 아니라 보안상으로도 이점이 있어 점점 더 많이 활용되는 기술인 것 같습니다.
보통은 공부하면서 참고했던 자료를 링크해드리는데, 학습 과정을 진행하기에도 벅차 오늘은 추후에 참고하려고 하는 자료를 기록하는 차원에서 적어두려고 합니다.
https://datatracker.ietf.org/doc/html/rfc6749 // OAuth2.0 RFC 문서(RFC 6749)
https://opentutorials.org/course/2473/16571 // 생활코딩님의 OAuth2.0 강의 목록
https://d2.naver.com/helloworld/24942 // 2012년에 작성되었고 OAuth1.0 이 주를 이루는 글이지만 로그인과 OAuth 의 차이를 사원과 방문증으로 비유한 부분이 와닿아서 더 참고해 볼 예정
https://velog.io/@undefcat/RFC-6749-02.-Introduction // OAuth2.0 에 관해 개인적으로는 제일 보기 쉽게 정리된 듯한 블로그 글
https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite // 카카오 로그인 개발자 문서