티스토리 뷰

제 13회 Daum DevDay 글을 통해서 밝힌적이 있지만 생각보다 티스토리 Open API는 잘 구성되어 있는 편이 아니며 스펙대로 동작 하지 않는 경우도 있었다. (그럼에도 티스토리를 사용한 이유는 국내 블로그중 유일한 글 올리기 API가 있기 때문이다.)





티 스토리 API의 대부분은 oAuth 인증을 받은 상태에서 진행 되도록 되어 있다. 때문에 티스토리를 이용한 무엇인가를 만든다면, 혹은 API를 사용한다면 OAuth는 반드시 지나가야 하는 관문이다. 특히 이 글에서는 TistoryTalk 앱에서 어떻게 OAuth 인증을 하였는가에 대해서 잘 설명해 보도록 하겠다. 


1. 티스토리 앱 등록하기 

-  OAuth 인증을 위해서는 일단 티스토리에 가입이 되어 있어야 한다. 그리고 나서 티스토리 오픈 API의 Consumer를 등록하는 부분에서 사용을 위한 등록을 해야한다. 아래의 그림을 보자. 




로고에 대한 부담은 가볍게 지우고, 기본적인 서비스 명을 입력하고 서비스 URL은 특별히 입력할 필요가 없다.(웹 서비스라면 입력을 해도 무방) 그 다음에 서비스 형태를 입력을 하는데 여기서 TistoryTalk은 앱이기 때문에 모바일을 선택을 했고, 서비스 권한은 읽기/쓰기를 선택하였다. 


그 다음으로 Callback URL을 입력해야 한다. 이 부분이 중요한데 TistoryTalk 에서는 자체 웹 페이지 주소를 넣었다. PC에서 테스트 할때는 Callback URL에 내 블로그 주소를 넣어도 주소창에서 access_token을 받아올수 있으나 아이폰 앱내에서는 그렇지 않다. 내 블로그를 입력했을때는 access_token이 리턴되는 것이 아니라, 바로 블로그의 모바일 페이지로 연결되어 버리기 때문에 로그인 후 access_token을 가져올 수가 없게 된다. 


자, 이렇게 등록을 했으면 아래와 같이 Client ID 와 Secret Key가 발급되는 것을 볼 수가 있다. 





2. 호출 URL 구성하기 

- URL 구성은 아래와 같이 하면 된다. 그리 어렵지 않다. 이 구성된 URL은 아이폰 앱내에 하드코딩으로 들어가게 되고 결과적으로는 UIWebView 에서 호출하게 된다. 


https://www.tistory.com/oauth/authorize?client_id=76f30e50a21087cd8581813762365396&redirect_uri=CALLBACKURL&response_type=token


3. 인증뷰 구성하기 

- TistoryTalk 에서는 설정에서 인증하기 버튼을 통해서 인증뷰를 호출하고 그 안에서 인증을 하도록 하였다. 인증뷰는 간단하게 기본 ViewController에 WebViewController를 붙인 뷰이다.

 


위 의 코드를 보자. 2단계에서 구성한 URL을 앱을 띄우자 마다 WebView에서 호출하고 있다. 이렇게 호출되면 기본적으로 티스토리 모바일 로그인 창이 뜨게 된다. 사용자는 이 단계에서 자신의 티스토리 아이디와 패스워드를 입력하고 확인을 누르게 된다. 



확인을 누르면 티스토리는 지정해 놓은 CallBackURL 에 access_token을 실어서 보낸다. 인증뷰에서 해 주어야 할 일은 이 access_token을 파싱해서 저장하는 것이다. 아래의 코드를 보자.

 


TistoryTalk 에서는 WebView의 delegate를 이용하기로 했다. webViewDidFinishLoad: 함수를 이용해서 웹 뷰가 로드가 끝났을때 url을 가져와서 파싱해서 access_token을 가져오도록 하였다. 그 런데 이 부분에서 함정이 하나 있는데, 이 delegate 를 이용하면 사실 티스토리 로그인 웹페이지가 로드될때 한번 호출되고 로그인 후 지정한 CallBackURL이 호출되면서 한번더 호출 된다는 점이다. 때문에 URL을 체크함으로써 단 한번만 유효한 파싱을 하도록 구성하였다. 



4. access_token 저장하기 


access_token 을 가져왔다면 저장을 해 두어야 한다. 그런데 중요한 점은 이 access_token은 모든 부분에 사용된다는 점이다. 즉 내 블로그 가져오기, 내 글올리기, 카테고리 목록, 댓글, 방명록 등의 API에 들어간다. 만약 앱내 다양한 클래스에서 그러한 기능을 구현하고 있다면 각각의 클래스에 access_token 변수가 있어야 한다는 점이다. 


이 러한 불편한(?) 구현을 덜기 위해서 TistoryTalk 에서는 앱내 설정에 저장하기로 하였다. TistoryAuth 라는 클래스를 만들어서 static 함수로 setToken:, getToken: 함수를 만들었는데 내부적으로  [NSUserDefault standardUserDefaults] 를 이용하고 있다. 이렇게 구성하게 되면, 어떤 클래스에서도 access_token 관련 변수를 가지고 있을 필요 없이 TistoryAuth 내 getToken: 함수를 호출하면 된다. 



이렇게 TistoryTalk 에서 티스토리 오픈API 의 OAuth 인증을 하는 방법에 대해서 알아 보았다. 사실 몇가지 이슈가 남아 있다. 그 첫번째는 인증 유효 시간에 대한 부분이다. access_token을 가져오는 URL에 expires_in 부분이 해당 access_token에 대한 유효 시간을 의미하는데 그 부분을 저장하고 체크해서 재 인증을 유도하는 부분은 아직 미 구현되어 있다. 


 




또 하나는 바로 CallBackURL 에 대한 부분이다. 사실 이 부분을 위해서 웹 서버가 있어야 한다는 것은 좀 불편하다. 트위터 OAuth 인증을 써본 사람을 알겠지만 access_token 같은 것이 트위터 페이지내에서 제공이 되고 대부분의 트위터 서드파트앱들을 인증을 하고 그 값을 파싱해서 사용하게 되어있다. 티스토리에서도 그런식으로 지원했으면 하는 바램이다. 


References

- OAuth와 춤을, helloworld.naver.com

- 티스토리 OAuth, www.tistory.com

- 티스토리 클라이언트 인증 API 리뷰, metalkin.tistory.com


 

댓글
최근에 올라온 글
싸다구
최근에 달린 댓글