Force.comのOAuthに関するメモ その02

この記事は force.comのdeveloperforce TM*1に掲載されているUsing OAuth to Authorize External Applications*2のメモです。
この記事はあくまでもメモです。
著作者、および販売元の権利を侵害するものではありません。
なお、なにか不都合等がありましたら削除いたします。
法的手段に訴えないでください。*3
 
 
7.Building a Java Google App Engine Application for Authorizing against Force.com
OAuthを利用して、GAE上で動くJavaアプリケーションとForce.comの連携に関する実装例が示されている項目。
主にJavaのコードワークとどういったメソッドが必要となるかについての解説が行われている。
Javaに詳しくない人でも、必要となるメソッド群だけは読んでおく必要がある。*4
 
HelperClassとIllustrativeClassという2段階の構成になっている。*5
 
○HelperClass
OAuthのフローのほとんどはサーブレットによって賄われるが、その処理をサポートする一般的なクラスもいくつか必要となる。*6
 
・OauthSettings
Force.comにて生成した公開鍵と秘密鍵を保持しておくためのクラス。
このクラスには基本的なOAuth設定(例えば、フローに必要なURLなど)を埋め込んでおいてもよい。
 
・SfdcCredentials
Force.comとのセッションやキャッシュを管理するクラス。
よりセキュアなシステムを構築する場合には必要となる可能性があるが、実際のOAuthフローには全く影響を与えないので、作らなくても良い。
 
・ConnectionManager
このクラスにはいくつかの役割があるが、そのどれに対してもシングルトンでなければならない。*7
1. Force.com上のレコードを使用するためにPartnerConnectionを確立する必要がある。getConnection()メソッドは、「セッションが既に存在しているか」、「新規セッションが必要か*8」などを決定するために利用される。
2. Force.comから返却されたのちアクセストークンと秘密トークンをデータベースに保持する。
3. Force.comからの返却時にエンドポイントとセッションをキャッシュする。
4. GAEアプリケーションが保持する既存のアクセストークンと秘密トークンがForce.comに認可されたものかどうかを問い合わせる。
 
・OauthHelperUtils
OAuthを利用する際に提供しなければならないいくつかの低レベルな機能を提供するメソッドが含まれる。
1. アクセストークンへのリクエス
2. OAuthのURL作成
3. Force.comからの新しいセッションの取得
4. Force.comから返却されたXMLのパース
 
○IllustrativeClass
Force.comからの認証を受けるユーザーが到達するだろうクラス群。
サーブレットはデータベースに対して既存のアクセストークンと秘密トークンがあるかを問い合わせ、ない場合認証を受ける必要があると警告を発する。
認証プロセスを始めるためにユーザーは“login”ボタンをクリックするだけで良いようにする。
 
・LoginServlet.java
Force.comへのアクセサーを作成するサーブレット
具体的にはGAEアプリケーションでForce.comにログインする際に利用される。
OauthHelperUtilsを利用して、新規にリクエストークンやコールバックURLを取得してきている。(インスタンスを生成している)
これらをアクセサーとしてパッケージングしている。
その後、コールバックURL先にリダイレクトする。
 
・CallbackServlet
リダイレクトされてくるサーブレット
実際のログインはこちらで行っているように見える。
具体的には上記LoginServletでトークンなどのOAuth設定を取得し、こちらでそれらのトークンを利用してログインしている模様。
 
・AccountServlet
Force.com内の情報引き出しを担当するサーブレット*9
ここではSOQLという独自SQLを利用して、データを取ってきているよう。
その後、取得したデータを利用して表示系*10に流している。

*1:参考URL: developerforce TM

*2:Author: Jeff Douglas
原文URL: Using OAuth to Authorize External Applications

*3:Please do not appeal to legal measures!!
I do not want to be sent to jail, and am not rich either!!!

*4:実際のコードに関しては割愛する。コードを参照する場合は、原文を参照のこと。

*5:アプリケーションとして2段となっている訳ではない

*6:正確には、必要ならば別出ししても良いよと言うニュアンス

*7:セッションの都合だと思われる

*8:新規にセッションを取得する訳ではない

*9:特に何も書かれていないが、コールバック後にリダイレクトされる先だろう。

*10:ソースでは/account.jsp