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 // 카카오 로그인 개발자 문서