OAuth 시작하기
작성자 : 타돌이
번호 : 94
(2011-06-22 20:51)
추천 : 0
조회 : 32081

목차

OAuth 이해하기

OAuth는 3rd party를 위한 범용적인 인증 표준입니다. OAuth에서 가장 중요한 부분은 3rd party가 사용자의 ID, 패스워드 대신 Access Token이라는 것을 얻어서 인증이 필요한 데이터에 접근 할 수 있다는 것입니다.

예를 들어, 여러분이 다이어리 서비스(이하 MyDiary)를 만든다고 합시다. 그리고 사용자가 기록한 내용에는 할 일 목록, 친구들과의 약속, 기념일 등 다양하게 있습니다. 그 중 동창회 약속이 있고, 사용자는 친구들에게 그 동창회 약속을 잊지 말라고 카페 한줄 메모장에 약속 내용을 남기고 싶습니다.

이 때, MyDiary에서 Daum 카페 한줄 메모장에 글을 쓰려면 사용자 인증이 필요합니다. 인증 방법에는 아래와 같이 2가지 방법이 있을 것입니다.

Daum이 MyDiary에게 사용자의 Daum ID/패스워드를 넘김

Daum이 MyDiary에게 사용자의 Daum ID/패스워드를 넘기면, MyDiary는 사용자가 Daum에서 할 수 있는 모든 것을 할 수 있게 됩니다. 패스워드 수정까지 가능해 버리죠. 즉, 이건 ID 도난입니다. 그래서 사용자는 Daum회원을 탈퇴해야 할 수도 있을 겁니다. 따라서 이런 방법을 사용하는 것은 매우 위험합니다.

Daum이 MyDiary에 Access Token 발급 (OAuth)

MyDiary에서는 사용자가 MyDiary에 기록한 동창회 약속 정보를 동창회 카페 한줄 메모장에 쓸 수만 있으면 됩니다. 비밀번호 변경, E-Mail 사용 등의 기능은 필요하지 않습니다. 그래서 제한된 기능을 할 수 있는 Token을 발급합니다. 그것이 바로 Access Token입니다. Access Token을 얻어낸 MyDiary는 동창회 약속 정보를 Access Token과 함께 한줄 메모장 글쓰기API를 호출합니다. 그러면 Daum은 Access Token이 유효한지 검사해서 유효한 경우에 카페에 글을 쓰게 됩니다.

그리고 만약 MyDiary에서 가져간 Access Token이 유출되어 문제가 생겼다 하더라도, 그 Access Token은 MyDiary에서만 사용할 수 있는 Token이므로 해당 Token만 삭제 또는 정지 시키면 됩니다.(이 Access Token은 다른 3rd party에서는 사용 불가) 탈퇴라는 극단적인 방법을 사용할 필요가 없게 됩니다.

위 사례와 OAuth에서 사용하는 용어를 대응시켜 보면, 여러분은 3rd party, 여러분이 개발할 애플리케이션(ex, MyDiary)은 Consumer, 그리고 Daum은 Service Provider입니다.

사실 OAuth가 등장하기 전부터 이미 여러 업체에서 이와 비슷한 인증 방식을 제공해왔습니다. 다만, 용어나 파라미터 등이 표준화되지 않아서 3rd party 개발자들이 각 업체의 인증방식을 따로 따로 학습해야 하는 불편함이 있었습니다. OAuth라는 표준의 등장으로 3rd party측에서는 이 한가지 방법만 익히면, 여러 업체의 인증기반 API를 쉽게 사용할 수 있게 되었습니다.

Daum 역시 별도의 인증API를 제공했었지만, 이제는 서비스 하지 않습니다.

OAuth 스팩

Daum은 OAuth 1.0 Revision A 문서한글로 제공하고 있습니다. 그리고 Daum이 Service Provider로서 제공하는 주요 URL은 아래와 같습니다.

Request Token URL

https://apis.daum.net/oauth/requestToken

Request Token 요청시 oauth_callback 값이 컨슈머의 Callback 경로와 동일해야 합니다.

사용자 인증 URL

https://apis.daum.net/oauth/authorize

Access Token URL

https://apis.daum.net/oauth/accessToken

서명 메소드는 HMAC-SHA1만 지원됩니다.

튜토리얼

여기에서는 3rd party 입장에서 OAuth Consumer를 만드는 기본적인 튜토리얼들을 제공합니다. 계속해서 언어별 튜토리얼을 추가할 예정이지만, 당장 다른 언어에서의 OAuth 사용법을 보고 싶으신 분은 oauth.net의 Code 페이지를 참조하시기 바랍니다.

.NET

  1. OAuth 기본 튜토리얼 for .NET(C#)new

Java

  1. OAuth 기본 튜토리얼 for Java
  2. OAuth 파일업로드 튜토리얼 for Java

JavaScript

  1. OAuth 기본 튜토리얼 for Javascript

PHP

  1. OAuth 기본 튜토리얼 for PHP

Python

  1. OAuth 기본 튜토리얼(console) for Python
  2. OAuth 기본 튜토리얼(mod_python) for Python
  3. OAuth 기본 튜토리얼(django) for Python

이용 사례

좋은 사례를 갤러리에 올려주시면, 검토 후 추가하겠습니다.