티스토리의 오픈 API 의 인증은 페이스북이나 트위터등에서 널리 사용되고 있는 OAuth 2.0 프로토콜을 사용하고 있다. 1.0 에 비해 인크립션이나 프로세스가 많이 생략되어 비교적 구현이 간편한 편이다. 사용을 위해서는 우선, 컨슈머 등록을 통해 Client IDSecret Key 를 발급받아야 한다. 스펙에서 얘기하는 Service Provider 는 여기서 티스토리 인증서버가 되고, Consumer 는 인증요청을 하는 사용자 어플리케이션 또는 서버가 된다.


컨슈머 등록

예를 들어, 구현하고자 하는 서비스는 블로그에 댓글이 달렸을 경우, 트레이에서 버블 팝업등으로 사용자에게 알려주는 데스크탑 어플리케이션으로 서비스 형태'PC어플리케이션', 서비스 권한은 최신 댓글 목록만 받으면 되니 '읽기전용' 으로 설정하였다. 서비스 URL 및 CallBack 경로는 해당 서비스를 나타내는 URL 또는 자신의 블로그등을 입력하면 되는데, CallBack 경로는 인증시 Access Token 이 리다이렉트 되는 경로이다.


등록을 완료하면 위와 같이 Client IDSecret Key 가 발급되는데, 구현하고자 하는 해당 서비스에 맞는 OAuth 2.0 프로세는 Implicit Grant Flow 로 JSP 등의 서버 사이드의 Authorization Code 인증 방식과 달리, Client ID 만 가지고 서비스 권한 요청이 가능하다.


Implicit Grant Flow


  1. 클라이언트(Consumer)에서 티스토리 서버(Service Provider)로 Access Token 을 요청하면,
  2. 사용자 로그인(ID/PASS)을 요구한다. 성공적으로 로그인이 되면,
  3. Consumer 등록시에 입력된 Callback 경로로 Access Token 을 실어 리다이렉트 시킨다.
  4. 해당 Access Token 과 조회할 블로그 아이디(targetUrl)로 최근댓글목록 API 호출.
  5. XML 리턴. (API URL에 &ouput=json 파라미터를 추가하여 호출하면, JSON 리턴)

티스토리 인증 가이드의 설명과 달리, Access Token 의 만료시간을 뜻하는 expires_in 파라미터는 리다이렉트 URL에 실려오지 않는다. 테스트 결과, 유효시간은 3600(60분) 으로 디폴트 설정되어 있다. 관련오류를 고객센터에 문의를 하였는데, 현재까지(10일 경과) 답변은 없는 상태이다. OAuth 2.0 스펙에서는, expires_in'RECOMMENDED' 항목으로 필수는 아니나 생략하였을 경우, 문서상이나 기타 다른 방법으로 기본 설정된 값을 명시하게 되어 있다.


해당 Access Token 이 시간경과(60분)로 인해 만료되면, 티스토리 API 호출 시, Access Token 이 만료되었다는 XML을 다음과 같이 리턴하게 된다.


이 경우, 새로운 Access Token 을 발급받아(1~3번) 사용하여야 한다. 만일, User Login 에 사용한 어플리케이션의 웹 브라우저 인스턴스를 종료하였다면 또 다시 사용자 로그인을 해야 하는 문제가 생기니, 로그인에 사용한 해당 브라우저의 인스턴스를 어플리케이션 종료시점까지 유지시켜줘야 한다.


시나리오


어플리케이션을 실행하면, 사용자 로그인 화면이 뜨고 사용자가 ID/PASS 를 입력하여 로그인에 성공하면 어플리케이션은 시스템 트레이로 이동하여 백그라운드에서 설정한 주기(ex. 10분)마다 최근 댓글 목록을 요청하여 갱신된 목록과 직전의 목록을 비교한다. 새로운 댓글이 존재할 경우 버블팝업으로 표시하고, 해당 팝업을 클릭할 경우, 해당 댓글의 블로그 페이지로 이동한다.


마치며


OAuth 1.0 과 비교하여, 2.0 인증은 그야말로 간편 그 자체다. 어찌보면, 2.0 스펙이 복잡하고 까다로웠던 1.0 스펙과 호환되지 않는건 당연해 보인다. 티스토리 인증 가이드에 설명이 비교적 잘 되어 있고, 스펙 자체도 간략한 편이라 적용에 큰 무리는 없지만 원체 블로그에 댓글이 잘 달리지도 않거니와 실제 사용성도 떨어져 보여, 댓글알림 어플리케이션 구현은 아마도 안할 것 같다;;;


댓글
댓글쓰기 폼