1. Copyright?2016 NTT corp. All Rights Reserved.
Spring Socialの基礎
2016年3月9日
NTT ソフトウェアイノベーションセンタ
岩塚 卓弥
2. 2Copyright?2016 NTT corp. All Rights Reserved.
? 名前:岩塚 卓弥
? 所属:NTT ソフトウェアイノベーションセンタ
? 専門:ソフトウェア工学 / プログラミング言語理論
グループ向けフレームワーク整備の担当でSpringを利用
自己紹介
3. 3Copyright?2016 NTT corp. All Rights Reserved.
Spring Social
Main Project
Spring Social Core
Spring Social Facebook
Spring Social Twitter
Spring Social LinkedIn
Incubator Project
Spring Social GitHub
Spring Social TripIt
コア以外は各API用のサブプロジェクト
17. 17Copyright?2016 NTT corp. All Rights Reserved.
Spring Socialの接続処理の大まかな流れ
ConnectionController
ConnectionFactory<A>
Connection<A>
ConnectionRepository
OAuth Server
接続用のリクエストマッピングを定義
接続処理を移譲
OAuth Danth
永続化
18. 18Copyright?2016 NTT corp. All Rights Reserved.
接続処理の大まかな流れ
ConnectionController
ConnectionFactory<A>
Connection<A>
ConnectionRepository
OAuth Server
接続用のリクエストマッピングを定義
接続用処理を移譲
OAuth Danth
永続化
Auto Configurationで
暗黙的に生成
19. 19Copyright?2016 NTT corp. All Rights Reserved.
Spring MVCのController
接続の作成?更新?切断のためのリクエストマッピングを定義
接続処理を適切なConnectionFactoryに移譲
ConnectionController
GET /connect
GET /connect/{providerId}
POST /connect/{providerId}
GET /connect/{providerId}?code={code}
DELETE /connect/{providerId}
DELETE /connect/{providerId}/{providerUserId}
GET /connect/{providerId}?oauth_token={request_token}
&oauth_verifier={verifier}
OAuth2用
OAuth1用
20. 20Copyright?2016 NTT corp. All Rights Reserved.
? OAuth Serverとの接続処理を担うクラス
? Service Providerごとに継承したクラスが存在
? AppID/AppSecretはConnectionFactoryに設定
ConnectionFactory
ConnectionFactory<A>
OAuth2ConnectionFactory<A> OAuth1ConnectionFactory<A>
FacebookConnectionFactory TwitterConnectionFactory
21. 21Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
/connect/{providerId}へPOST
22. 22Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
appIDを取得
23. 23Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
appIDとリダイレクトURLを渡す
アクセスしたいリソースもパラメータで指定する
リダイレクトURLはデフォルトで/connect/{providerId}
24. 24Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
アクセス許可を与える
25. 25Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
認可コードを付けてリダイレクト
26. 26Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
appSecretを渡してアクセストークンを取得
アクセスにはRestTemplateを使用
27. 27Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
Connectionを作成
28. 28Copyright?2016 NTT corp. All Rights Reserved.
? ConnectionControllerとConnectionFactoryがア
クセストークン取得時のやり取りを隠蔽
OAuth Danceの隠蔽
Connection
Controller
Connection
Factory
OAuth Server
/connect/{providerId} へリダイレクトしてViewを表示