2011年6月3日金曜日

Evernoteにアクセスする その4 HMAC-SHA1編


ここまでサンプルを元にEvernoteにアクセスしてきましたが、
SimpleOAuthRequestの中身を見てOAuthアクセスへの理解を
深めておきましょう。。。。って思ったんですけど、PLANTEXTでアクセスしているので
HMAC-SHA1でアクセスしてみましょう。

以下が元ソースです。
見られる場合は展開してください。




これをHMAC-SHA1で処理を行う場合は、oauth_signatureの指定に
・HTTPメソッド
・リクエストURL
・リクエストパタメータ
これらをURLエンコードして、&で結合してHMAC-SHA1で16進のダイジェスト値を作って
Base64エンコード後、URLエンコードした値をoauth_signatureに指定します。

オリジナルでEvernoteRequestクラスを作成してアクセスしてみましょう。
※動作確認用なので汚いのは許して><

以下がHMAC-SHA1でアクセスしたソース



・・・本当に汚い、、、
で、これを利用してindex時に

  1.         EvernoteRequest oauthRequestor = new EvernoteRequest();  
  2.         String thisUrl = request.getRequestURL().toString();  
  3.         String cbUrl = thisUrl.substring(0, thisUrl.lastIndexOf('/') + 1);  
  4.         cbUrl = cbUrl + "callback";  
  5.   
  6.         oauthRequestor.setParameter("oauth_callback", cbUrl);  
  7.         Map<string, string=""> reply = oauthRequestor.sendRequest(null);  
  8.           
  9.         String requestToken = reply.get("oauth_token");  
  10.         String tokenSecret = reply.get("oauth_token_secret");  
  11.         String authorizationUrl = authorizationUrlBase + "?oauth_token=" + requestToken;  
  12.   
  13.         sessionScope("tokenSecret",tokenSecret);  
  14. </string,>  


という風にします。
すべての引数を指定した後にoauth_signatureを生成するので
sendRequest()にtokenSecretを持ってきています。(コールバック時に利用)

リクエストトークンとともにtokenSecretは取得できます。
アクセストークンを取得する際に使用するtokenSecretをセッションに残しています。
で以下がコールバックの処理。

  1.         EvernoteRequest oauthRequestor = new EvernoteRequest();  
  2.   
  3.         String requestToken = requestScope("oauth_token");  
  4.         String verifier     = requestScope("oauth_verifier");  
  5.         String tokenSecret  = sessionScope("tokenSecret");  
  6.   
  7.         oauthRequestor.setParameter( "oauth_token", requestToken);  
  8.         oauthRequestor.setParameter( "oauth_verifier", verifier);  
  9.   
  10.         //取得する  
  11.         Map<string, string=""> reply = oauthRequestor.sendRequest(tokenSecret);  
  12. </string,>  


こちらはセッションからtokenSecretを取得して指定しているだけですね。

んーAuthrorization Headerでアクセスしたいですよねー。
アクセスもPOSTでもないですし。。。本物はそうしてみようっ。と。

次回、OAuthを読んでいくか、APIアクセスをもう少し行ってみるか悩んでます。
それを記述するのはOAuthの仕様なだけなのでそっち読めば良いかなぁ、、、と。

0 件のコメント: