opensocialのアーキテクチャ

44
OpenSocialのアーキテクチャ えーじ 1

Upload: eiji-kitamura

Post on 24-Jun-2015

3.710 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: OpenSocialのアーキテクチャ

OpenSocialのアーキテクチャ

えーじ

1

Page 2: OpenSocialのアーキテクチャ

自己紹介 • 北村英志 (id: agektmr)

‒ NTTレゾナント株式会社(gooホーム) ‒ Google API Expert (OpenSocial) ‒ Shindig committer ‒ SocialWeb Japan主催 ‒ ブログ: Tender Surrender http://devlog.agektmr.com/

2

Page 3: OpenSocialのアーキテクチャ

OpenSocial

3

Page 4: OpenSocialのアーキテクチャ

OpenSocialアプリとは?

4

Page 5: OpenSocialのアーキテクチャ

成り立ち •  2007年11月 Google Campfireで発表 • MySpace、hi5、orkutといった米国大手のSNSが賛同

• Googleの先導で始まったものの、現在はOpenSocial Foundationが取りまとめている

5

Page 6: OpenSocialのアーキテクチャ

特徴 • オープンな仕様

‒ Learn Once, Write Anywhere • オープンな仕様作成プロセス

‒ http://groups.google.com/group/opensocial • 豊富な関連オープンソースプロダクト

‒ Apache Shindig ‒ OpenSocial Client Libraries ‒ OpenSocial Development Environment ‒ OpenSocial‒jQuery ‒ etc.

6

Page 7: OpenSocialのアーキテクチャ

仕様策定プロセス • オープンなメーリングリストで議論 • 誰でも仕様の提案が可能 • 仕様について議論 • 投票 •  Apache Shindigで実装 • 仕様完成

7

Page 8: OpenSocialのアーキテクチャ

OpenSocialの仕様

8

Page 9: OpenSocialのアーキテクチャ

2つの側面

•  JavaScript API (ガジェットプラットフォーム) ‒ SNS内に埋め込むアプリケーション

•  RESTful API (外部サーバー連携) ‒ SNS外にソーシャルグラフを提供

9

Page 10: OpenSocialのアーキテクチャ

OpenSocialガジェットでできること

• HTML, CSS, JavaScript, Flash等を使った、SNS上で動作するアプリケーションの開発

• ソーシャルグラフの取得 • プロフィールの取得 • アクティビティの送信、取得 • アプリデータの保存、取得 • メッセージの送信 • 外部サーバーとの通信 •  etc.

10

Page 11: OpenSocialのアーキテクチャ

ガジェットの作り方

11

Page 12: OpenSocialのアーキテクチャ

手順 1.  XMLファイルを書く 2. ウェブサーバーにアップロード 3. OpenSocialコンテナに登録 4. ガジェットを表示

12

Page 13: OpenSocialのアーキテクチャ

XMLファイルの構成 • メタ情報

‒ ガジェット名 ‒ 概要 ‒ 利用する機能(feature) ‒ その他設定、定義

• ガジェットの表示内容 ‒ ビューごとに指定 ‒ HTML, CSS, JavaScript, Flash, etc.を記述

13

Page 14: OpenSocialのアーキテクチャ

OpenSocialのガジェットXML <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="タイトル" description="概要文" author="Eiji

Kitamura" author_email="[email protected]" > <Require feature="opensocial-0.8" /> <Require feature="dynamic-height" /> </ModulePrefs> <Content type="html" view="canvas"> <![CDATA[ ガジェットに表示するソースコード ]]> </Content> </Module>

14

Page 15: OpenSocialのアーキテクチャ

サーバーにアップロード • Webサーバー • Google AppEngine • Dropbox

15

Page 16: OpenSocialのアーキテクチャ

OpenSocialコンテナに登録

16

mixiアプリ

gooホーム

Page 17: OpenSocialのアーキテクチャ

ガジェットを表示

17

Page 18: OpenSocialのアーキテクチャ

ガジェットはどうやって表示されているのか?

18

Page 19: OpenSocialのアーキテクチャ

ブログパーツ?

19

Page 20: OpenSocialのアーキテクチャ

XSSを避ける4つの方法 • ドメインを分ける • 安全性の確認されたJavaScriptのみ許可する •  JavaScriptの危険な部分のみ無力化する(Caja) •  iframeで表示する

20

Page 21: OpenSocialのアーキテクチャ

ShindigでのGadget表示方法

21

Page 22: OpenSocialのアーキテクチャ

iframe対応による課題 • 認証方法 • コンテナとShindigの通信方法 • 外部サーバーとの通信方法 • セキュリティ

22

Page 23: OpenSocialのアーキテクチャ

OpenSocialアーキテクチャ

23

Shindig Container

Browser

Gadget

opensocial gadgets

Database

proxy json-rpc

metadata

External Service

Gadget XML

SNS

Page 24: OpenSocialのアーキテクチャ

ガジェットが表示されるまで

24

Page 25: OpenSocialのアーキテクチャ

1. ブラウザからSNSにアクセス

25

Shindig Container

Browser

Database External Service

Gadget XML

Page 26: OpenSocialのアーキテクチャ

2. ガジェットに関する情報を収集

26

Shindig Container

Browser

Database

metadata

External Service

Gadget XML

Page 27: OpenSocialのアーキテクチャ

3. SNSをレンダリング

27

Shindig Container

Browser

Database External Service

Gadget XML

SNS

Page 28: OpenSocialのアーキテクチャ

4. iframeにガジェットをレンダリング

28

Shindig Container

Browser

Gadget

Database External Service

Gadget XML

SNS Token

Page 29: OpenSocialのアーキテクチャ

5. iframeにガジェットをレンダリング

29

Shindig Container

Browser

Gadget

Database External Service

Gadget XML

SNS

Page 30: OpenSocialのアーキテクチャ

OpenSocial APIを使う

30

Page 31: OpenSocialのアーキテクチャ

OpenSocial APIを使う

31

Shindig Container

Browser

Gadget

opensocial

Database

json-rpc

External Service

Gadget XML

SNS Token

Page 32: OpenSocialのアーキテクチャ

外部サーバーと通信する

32

Page 33: OpenSocialのアーキテクチャ

外部サーバーとの通信

33

Shindig Container

Browser

Gadget

gadgets

Database

proxy

External Service

Gadget XML

SNS

Page 34: OpenSocialのアーキテクチャ

Signed Request • 別名OAuth Consumer Request、2 Legged OAuth

• ガジェットが外部サーバーと通信する際のオプション

• リクエストに署名を付け加えることができる • 外部サーバーは、署名を元にリクエスト内容が改ざんされていないかチェック可能

34

Page 35: OpenSocialのアーキテクチャ

ケース1

• 無関係なガジェットやサーバーからデータを書き換えられる

35

Evil External Service

悪意のあるサーバー

Page 36: OpenSocialのアーキテクチャ

ケース2

• GreaseMonkey等を使って他人に成り済まされる

36

Shindig

Browser

Gadget

gadgets proxy External Service

悪意のあるスクリプト

Page 37: OpenSocialのアーキテクチャ

ケース3

• 通信途中のノードでリクエストを書き換えられる

37

Shindig

Browser

Gadget

gadgets proxy External Service

悪意のある仲介者

Page 38: OpenSocialのアーキテクチャ

Signed Requestで解決

• サーバーで正確な情報を追加 ‒ opensocial_viewer_id ‒ opensocial_owner_id ‒ opensocial_app_url

• 電子署名を追加 38

Shindig

Browser

Gadget

gadgets proxy External Service ............ ....... ............ .........

Page 39: OpenSocialのアーキテクチャ

OAuth • ガジェットが外部サーバーと通信する際のオプション

• 外部サーバーの認証の仕組みを使い、ガジェットが認可を得ることができる

• OAuth Proxy

39

Page 40: OpenSocialのアーキテクチャ

OAuthを用いないマッシュアップ

• ユーザーは信頼できるとは限らないアプリケーションに、サービスのクレデンシャル(ID/Pass)を預けざるを得なかった

40

Application Browser Service

ID/Pass

Page 41: OpenSocialのアーキテクチャ

一般的なOAuth

41

Application Browser Service

ユーザー コンシューマ サービスプロバイダ

ID/Pass Token

Page 42: OpenSocialのアーキテクチャ

OpenSocialにおける OAuth Proxy

42

Shindig

Browser

Gadget

gadgets proxy External Service

ユーザー コンシューマ サービスプロバイダ コンシューマ?

ID/Pass Token

Page 43: OpenSocialのアーキテクチャ

OpenSocialアーキテクチャ

43

Shindig Container

Browser

Gadget

opensocial gadgets

Database

proxy json-rpc

metadata

External Service

Gadget XML

SNS

Page 44: OpenSocialのアーキテクチャ

最後に • 現在日本のOpenSocialコンテナはgoo、mixi • 既にDeNA、リクルートが対応を表明 •  smart.fmも対応予定

44

日本のソーシャルウェブを 盛り上げて行きましょう!