OAuth를 간단히 알아보자

Written by kwSeo

다른 사이트 계정으로 로그인

언제부터인가 어떤 한 사이트에 로그인하기 위해 반드시 그 사이트에 로그인을 할 필요가 없어졌다. ‘페이스북으로 로그인하기’, ‘트위터로 로그인하기’ 등 다른 사이트의 계정을 통해서 로그인이 가능한 경우를 많이 보았을 것이다. 이러한 기능 덕분에 우리는 일일이 회원가입을 하는 번거로움을 없앨 수 있고, 하나의 계정으로 다양한 사이트에서 활동할 수 있다. 이런 ~으로 로그인하기 같은 기능들은 OAuth라는 표준을 따르고 있다. OAuth를 통해 서로 다른 사이트에서 하나의 계정으로 신뢰성있는 로그인을 할 수 있다.

OAuth란?

OAuth는 위에서 말했듯이 서로 다른 사이트에서 로그인을 할 수 있도록 해준다. 보다 자세히 말하자면 A라는 사이트에서 B라는 사이트 또는 사용자에게 접근권한을 주는 것이다. A 사이트의 계정을 OAuth를 통해 B 사이트에서 권한을 얻으면 A사이트에서 제공하는 API에 접근하여 사용할 수 있는 것이다. 이점을 이용해 로그인을 하는 것이다. 즉, OAuth 자체가 로그인을 말하는 것은 아니란 것이다. OAuth를 이용해서 로그인을 하는 것이다. OAuth와 로그인은 서로 다르게 이해해야한다.

OAuth는 인증(Authentication)뿐만 아니라 허가(Authentication) 또한 포함하고 있다. OAuth를 통해 인증받은 계정은 설정한 권한을 부여받게 된다. 보통 이 권한은 OAuth API를 제공하는 사이트에서 정할 수 있다. 권한에 대해서 예를 들자면, 어떤 계정은 프로필 API에만 접근할 수 있고, 어떤 계정은 프로필을 포함하여 작성한 모든 게시물의 접근, 수정, 삭제 등을 수행할 수 있다.

OAuth API를 제공하는 사이트에서 권한을 정할 수 있다는 것은 그 사이트에서 OAuth에 대한 설정을 할 수 있다는 것이다. 페이스북, 구글, 트위터 등 대부분의 OAuth API 제공 사이트는 사용자가 설정을 할 수 있는 기능 또는 페이지를 제공한다. 실제로 이러한 기능이 필수적인게 OAuth 인증을 위해서는 API를 제공하는 사이트에 등록하는 작업이 필요하며 등록한 다양한 데이터를 주고 받기 때문이다. 자세한 것은 아래에서 살펴볼 것이다.

OAuth 동작 방식

OAuth를 사용하기 위해서는 API를 제공하는 사이트에서 제공하는 서비스를 통해 앱 등록을 해야한다. 페이스북, 그굴 등과 같은 사이트는 개발자 서비스를 제공하며 이를 통해 등록을 할 수 있다. 그리고 등록 후 받는 애플리케이션 키를 통해 OAuth 인증을 수행한다.

oauth-sequence-diagram

위 그림과 함께 서비스의 흐름을 따라가보자. 먼저 User는 사이트에서 페이스북을 통한 로그인을 요청한다. Browser는 이러한 요청을 Application에게 전달하며 Application은 이러한 요청을 받아들여 처리하고 리다이렉트(302) 응답을 보낸다. 이 응답을 통해 Browser는 Facebook 로그인화면으로 이동하며 User는 이 페이지에서 Facebook의 계정으로 로그인을 수행한다. 로그인에 성공하였다면 Facebook은 client_id와 client_secret과 함께 리다이렉트 응답을 한다. 리다이렉트를 통해 Browser는 원래 Application으로 요청을 하고 Application은 client_id와 client_secret와 함께 Facebook에 인증 및 권한 요청을 하여 최종적으로 access_token을 받게 된다. 그리고 인증에 성공했다는 의미의 응답을 Browser에게 답한다.

최종적으로는 access_token, expires_in, refresh_token 등을 받게 된다. access_token은 이제 앞으로 Facebook의 API를 이용하기 위해 필요한 열쇠라고 볼 수 있다. API를 사용하려면 access_token이 필요하다. access_token은 무제한 이용할 수 있는 것이 아니다. expires_in은 access_token의 제한 시간을 나타내며, expires_in에서 지정한 시간 후에 access_token은 소멸하여 더 이상 사용할 수 없다. 새로운 access_token을 받기 위해서는 refresh_token을 사용한다.

웹앱은 엑세스토큰을 받음으로써 해당 계정에 대한 권한을 얻는다. 이를 통해 프로필과 같은 정보를 받아서 자동 로그인 및 회원가입을 수행하며, 더 나아가 지원 받는 API를 통해 자신의 기능을 확장할 수 있다.

References

Done At: Jan 15,2016
Categories: