Archive for the ‘OpenSocial’ Category
Cajaの仕様が変わっててビルドできないようです。
これどうしたらいいんだろう?Mavenは便利だけど、こういうことがあるとキツいよなあ・・・。
なんか無茶苦茶になってる。なぜかhttp://の前に//がついてたりとか、同じパラメータが2個以上あったりとか、セキュリティトークンがなぜか付属してたりとか(しかも内容はただのゴミ文字)、バグバグすぎる。一体どうしちゃったんだ?
とりあえず正規表現で置換して対応したりするけど、これどうしようもないよ。最悪だ。
ここ何日か色々試してみたのだが、どうにもうまくいかない。
OSDE上のOpenSocialガジェットからmakerequestでOAuthを使うことができない。できない・・・。
色々書き方を変えてみたりしても、Failed to retrieve OAuth URLs~ のエラーが出て一切通信できないので、対応してないのではないかという結論に勝手に至ることにした。OSDE的にはModulePrefs内にOAuthエレメントが無いらしい。あるはずなんだけどなあ。
仕方ないのでとりあえず2-legged OAuthで場当たり的に実装を進める。
OpenSocialの署名付きリクエストの検証テストをしようと思ったのだが、OSDEの公開鍵が分からない。どっかに公開されてたりするのかな?
追記:探すべきは証明書のようだ。証明書はどこだ!
更に追記:うおおお検証通った!OSDEのソースを落としてきたら秘密鍵が入っていたので、こっから証明書を生成して作ったらいけた!役に立つかもしれないので貼っておく。
OSDE用の証明書
-----BEGIN CERTIFICATE----- MIICDDCCAXWgAwIBAgIJAI/Uh/1KPGPUMA0GCSqGSIb3DQEBBQUAMA8xDTALBgNV BAMTBG9zZGUwHhcNMTAwNjI5MDQwMzU0WhcNMTAwNzI5MDQwMzU0WjAPMQ0wCwYD VQQDEwRvc2RlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAv7N2y4S1TWgL 1UlaqivxGKyskl5o5TLoZdli2AMHidjVzTJsGX1ydYWJmteicnVLTo//JrmkB19C L+IYCOnxo6H5YdNAi+t7e3NRpMJF6YBCV+MXnP2dZx02SHAhO6z4i8P/EMcnNX6l sX7cXeMnmYS+X7AG+AS6zVVdSKQwVwIDAQABo3AwbjAdBgNVHQ4EFgQUbONO5jjA q8gC34J+iUfAnkZVelswPwYDVR0jBDgwNoAUbONO5jjAq8gC34J+iUfAnkZVeluh E6QRMA8xDTALBgNVBAMTBG9zZGWCCQCP1If9Sjxj1DAMBgNVHRMEBTADAQH/MA0G CSqGSIb3DQEBBQUAA4GBAG3QjNTSvDTpAmzEH3NueftHi34xN9+6B5H/vpknsz/K oGmLXdXjhnFlPJn+5nlOLyYG5W24yeyQ/gjwY9aYsWpJGUp59fHy8tU215P5lDc/ VTOi4LLFqbd89r0w4mNccPZ5LMuSmyBG42ypzCjfLsjzw80DW7wxegndXb6oAjNo -----END CERTIFICATE-----
SNSからShindigに対して、OpenSocialガジェットのメタデータ(タイトルや作者情報などなど)を取得するリクエストや、実際にiframeに表示する内容を要求するリクエストを投げるときに、&st=*********(実際はもっと長い)という項目をURLに追加して投げる必要がある。
これは何かというと、どうやらSecurityTokenと呼ばれているものらしい。これを一緒に投げることによって、「どのコンテナからのリクエストなのか」「実際にガジェットを閲覧するユーザーのID」「ガジェットの所有者のID」などなどをShindigが取得できるようになっている。
現在の形式ではこんな感じに作る。
コンテナ名:o=所有者(owner)ID&v=閲覧者(viewer)ID&a=ガジェットのID&d=コンテナ名&u=ガジェットのURL&m=モジュールID&t=タイムスタンプ
例)default:o=user001&v=user002&a=gadget001&d=default&u=http://shindig/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml&m=1&t=123456789
※実際には、default:の後ろはURLエンコードされなければならないので、u=の後ろは適切でない。
insecureなSecurityTokenならば、こいつをそのまま送ればいいはずだが(試してはいないので、ツッコミ求む)、secureなセキュリティートークンだとそうはいかない。
まず、AES-CBCでo=***&v=***・・・と書かれた部分を暗号化する。共通鍵には、プレーンテキストをSHA-1でハッシュ化してやり、その先頭16バイトを用いる。Shindig側はテキストファイルを置いて、container.jsでそのパスを指定してやらなければならないが、詳しいやり方は割愛する。(その際のテキストファイルは元のプレーンテキストで構わない)
パディングの方式はPKCS5Paddingを用いる。ivが必要なので、AESで暗号化した後に先頭にivを付け足すのを忘れずに。
次に、HMAC-SHAで署名を行う。この際のキーも、AESで暗号化する際と同じく、プレーンテキストをSHA-1でハッシュ化したものを用いるが、先頭16バイトである必要はない。Shindig側では、AESの際もHMACの際もキーは共有で使っているようだ。署名を行う対象はもちろんAESで暗号化されたテキスト。末尾に署名を付け足すのを忘れずに。
これらにBASE64エンコードをかけ、URLエンコードも忘れずにおこなう。
最後に、先頭にコンテナ名とコロンを付けて、出来上がり。これでSecureなSecurityTokenが完成。
めちゃくちゃ苦労したので記録を残しておくことにする。
右往左往したが、ようやくEclipse上でShindigのデバッグが出来るようになった。
最終的に参考にしたサイトはこちら。→http://my6solutions.com/post/2008/10/14/Getting-debugging-to-work-on-shindig-under-Windows.aspx
JDK、Maven2は前回で導入している前提で、話を進める。
Maven for Eclipseの導入
まずは、Maven for Eclipseを導入する。
Eclipse上でヘルプ→新規ソフトウェアのインストールで、追加ボタンをクリックし、新規サイトを追加する。
名前:Maven2 – Sonatype
ロケーション:http://m2eclipse.sonatype.org/sites/m2e
Eclipse用Maven統合を上のサイトからインストールする。
※このプラグインを使う場合はEclipseをJDK上で走らせている必要があるようだ。JREになってしまっている場合は、Eclipseへのショートカットか、eclipse.iniに -vm JDKのjavaw.exeへのパス を追加しておく。
shindigのMavenプロジェクトのEclipseへのインポート
Eclipse上でファイル→インポート
Maven→Existing Maven Projectsを選択、次へ
ルートディレクトリとしてshindigのルートディレクトリを開き、
features/pom.xml
java/common/pom.xml
java/gadgets/pom.xml
java/social-api/pom.xml
java/server/pom.xml
にチェックを入れ、完了。
5つのプロジェクトがパッケージ・エクスプローラーに追加されるので、ワークスペースがビルド完了するまでしばらく待つ。
jettyをEclipseから実行できるようにし、shindigをデバッグ実行できるようにする
Eclipse上で実行→外部ツール→外部ツールの構成を選択。
プログラムの項目に新規プログラムを追加する。
名前:maven_jetty
ロケーション:mvn.bat(mavenのバッチファイルかな?)へのフルパス
作業ディレクトリ:ワークスペースの参照から、shindig-serverを選択
引数:jetty:run
環境タブを選択し、
名前:MAVEN_OPTS
値:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y
という項目を追加→適用。
Eclipse上から実行→デバッグの構成を選択。
リモートJavaアプリケーションに新規項目を追加し、
名前:shindig_debug
プロジェクト:shindig-serverをプロジェクトから選択
ホスト:localhsot
ポート:4000
を入力→適用。
Shindigをデバッグ実行する
これでShindigがデバッグ実行できるようになったので、外部ツールからmaven_jettyを実行、デバッグの構成からshindig_debugをデバッグで実行。
http://localhost:8080/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml
で動作確認できる。以上。
かなり試行錯誤したので、何か抜けてる工程があるかもしれません。うまくいかなかった場合はご一報を。
Shindigをデバッグ実行したくなったが、PHP版のままではデバッグが面倒、ということでやむなくJava版のShindigを使うことに。
詳しくはここ→http://www.hakkaku.net/articles/20080624-222
を見ると早い。4/27現在ではこのやり方で問題なくビルドできる。一応手順を。
あらかじめJDKはインストールしておく、ここでは手順は割愛する。
Apache Mavenのインストール
http://maven.apache.org/download.htmlから最新版(2.2.1)のアーカイブを落としてきて、適当なフォルダに展開。
環境変数に
JAVA_HOME JDKのインストールフォルダ(例:C:\Program Files\Java\jdk1.6.0_18)
M2_HOME Mavenのインストールフォルダ(例:C:\Program Files\Apache Software Foundation\apache-maven-2.2.1)
を追加、
Pathの末尾に ;%M2_HOME%\bin;%JAVA_HOME%\bin
を追加。クオーテーションマークとかをつけないように注意。追加したらいったんログオフするか再起動しておく。
Subversionのインストール、Shindigのダウンロード
ここ→http://subversion.apache.org/からSubversionを落として、インストール。
適当なフォルダを作り、コマンドラインでフォルダに移動した後、
svn co http://svn.apache.org/repos/asf/shindig/trunk/
でShindigの最新trunkを落としてくる。
ビルド、実行
このままだとビルド時にエラーが出るので、
pom.xmlを開き、<compilerArgument>-Xlint:unchecked,deprecation,fallthrough,finally</compilerArgument>の部分をコメントアウト(<!– –>)する。
Shindigを落としてきたフォルダにコマンドラインで移動し、
mvn -Dmaven.test.skip=true
を実行。初回実行は時間がかかるが、2回目からはそれほどかからない。
これでビルドが成功するはずなので、
mvn -Prun
を実行。動作確認は
http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html
で行える。リンク先に感謝。
ざっくりと。まだまだ理解も中途半端なので、逐次修正します。
Shindigとは、OpenSocialのアプリケーションを動かすためのアプリケーションサーバーのようなもの。MixiやiGoogleなどは、Shindigを通してOpenSocialのアプリケーションを走らせるプラットフォームを提供している。
OpenSocialとは?
XML、JavaScript、HTML等の既存技術を活用して作ったWebアプリケーションを、さまざまなSNSに埋め込むことができるようにするための共通規格。Googleが主導して策定されたもの。
Shindigは何をしてくれる?
ShindigはOpenSocialの規格に沿って作られたXMLを読み込み、ユーザーのWebブラウザ上で実行可能な形式(HTML)にして出力する。
MixiやiGoogleはShindigから出力されたHTMLをiFrame内に表示してOpenSocial環境を実現している。さまざまな場所にあるOpenSocialアプリケーションを一まとめにするのがクラウド(かな?)。
SNS側からは、単純にShindigサーバに対してHTTPのリクエストを投げてあげればOpenSocialアプリケーションが実行できる。ただしそれだけでは不完全。OpenSocialアプリケーションが真価を発揮するには、ユーザーのソーシャルデータ(年齢、性別、趣味、などなど)を知る必要がある。そのためには、ShindigサーバがSNSのデータベースにアクセスできる必要がある。データベースに接続するインターフェースを用意して、初めてShindigとSNSが密接に連携しているといえる。