앞으로 몇개 글을 통해서 Go로 OAuth 인증을 구현하는 것을 해보려고 합니다. 오늘 글은 그 첫번째로 OAuth인증 방식과 GitHub에서 OAuth앱을 등록하는 방법을 간략히 설명합니다.
아마도 "Login with Google" 또는 "Sign in with GitHub" 이라는 버튼은 이제 익숙하게 봐왔을 것입니다. 사용자에게는 편리한 기능이지만, 기능을 개발하는 개발자는 개발하기가 좀 까다로운 기능입니다. ( 물론 이미 훌륭하게 구현해 놓은 소스코드들이 있기 때문에 반드시 까다롭다고 말할 수는 없습니다. ) 바로 OAuth 라는 규약의 인증과정을 이해해야 하고, 그 규약에 맞추어 메시지를 주고 받을 수 있어야 하기 때문이기도 하고, 테스트를 하려면, 직접 해당하는 서비스와 연결해야 할 필요가 있는데, 그렇지 못한 환경에서 개발하는 경우도 많이 있기 때문입니다.
그러면 왜 OAuth를 사용해야 할까요?
먼저 인증처리를 할 필요가 없습니다. 단순히 인증만 처리한다면 입력된 사용자 계정을 확인하고 세션을 생성해주면 끝이지만, 여기서 끝이 아닙니다. 비정상적인 로그인 요청에 대해서 대비해야 하고 사용자 정보를 안전하게 보호해야 합니다. 이러한 일들은 결코 쉽지 않습니다. 오히려 OAuth를 이해하고 구현하는게 더 나을 것입니다. 그리고 아마도 OAuth 제공자의 인증 및 보안이 직접 만든 것보다는 나을 것입니다. 그리고 이미 잘 구현된 라이브러리가 있으므로 구현하기도 어렵지 않습니다.
그리고 사용자는 별도의 패스워드를 생성하지 않아도 되므로, 더 쉽게 서비스를 이용할 수 있습니다. 그리고 개발자들 대부분은 GitHub의 계정을 가지고 있으므로 여기서는 GitHub의 OAuth를 예로 들어 설명합니다.
OAuth의 인증 과정.
먼저 사용자는 우리가 만든 앱에 로그인하려고 할 것입니다. 그리고 앱에서 그린 로그인 화면에서 "Sign in with GitHub" 버튼을 누릅니다. 그러면 GitHub에 인증 요청을 보냅니다. 다음엔 GitHub이 사용자에게 GitHub에 로그인 화면을 보여준 후, 앱에서 인증 요청한 권한의 내용을 보여주며 허가할 것인지를 묻습니다. 사용자가 허가 한다면, GitHub은 앱의 Callback으로 정보를 보내줍니다. 이후 과정에서 access_token이 발급되고 사용자에게 세션을 만들어주는 과정을 거치게 됩니다.
OAuth를 사용하려면.
OAuth의 인증과정을 거친다고 모든 앱이 GitHub으로 인증하기를 할 수 있는 것은 아닙니다. 기능이 동작하기 이전에 우리가 만든 앱이 GitHub에 등록되어 있어야 하는데, 그 과정은 GitHub -> Profile -> Settings에서 Developer settgins화면 중 OAuth Apps를 통해서 등록을 해줘야 합니다.
"Register a new application" 버튼을 클릭하여 다음과 같은 정보를 입력해 줍니다.
앱 이름과, 홈페이지 주소를 적어주고, "CallBack URL"을 정확히 적어주고, (다른 것들은 몰라도 CallBack URL은 정확하게) "Register application"을 눌러주면, Client ID와 Secret이 발급되게 됩니다.
이때 발급된 정보를 이용하여, OAuth 과정을 진행하면 됩니다. 다음 번에는 이 과정이 실제로 이루어지는 것을 코드로 구현해 보겠습니다.