Download - Secured Authentication Method for Managing Consumer-Generated Information in Web-Services
2008/1/242008/1/24 11
利⽤者が発信する情報を扱う利⽤者が発信する情報を扱うWebWebサービスにおけるサービスにおける認証⽅式の実装認証⽅式の実装
2008/1/242008/1/24 22
1. 1. はじめにはじめに
2008/1/24 3
背景背景
►►インターネットを取り巻く環境の変化インターネットを取り巻く環境の変化ネットワークの普及と利⽤者の増⼤ネットワークの普及と利⽤者の増⼤オープンソースの発展によるコスト低下オープンソースの発展によるコスト低下
►►WebWebの利⽤形態の変化、の利⽤形態の変化、いわゆる「いわゆる「Web2.0Web2.0」」利⽤者発信情報利⽤者発信情報 ((ブログブログ, SNS), SNS)WebWebサービスサービス, WebAPI, WebAPI化化
2008/1/24 4
利⽤者発信情報とは?利⽤者発信情報とは?
►►情報取得から情報発信へ情報取得から情報発信へ従来従来: : 情報を「⾒る」情報を「⾒る」近年近年: : 情報を「発信」(情報を「発信」(利⽤者発信情報利⽤者発信情報))
Webアプリ写真⽂書
利⽤者発信情報
2008/1/24 5
WebWebサービスとは?サービスとは?
►►WebWebアプリ同⼠が情報を交換アプリ同⼠が情報を交換SOAP, RESTSOAP, RESTマッシュアップマッシュアップ WebアプリA
(Provider)
WebアプリB(Consumer)
XMLWebサービス
HTML
利⽤者(Webブラウザ)
加⼯
2008/1/24 6
利⽤者発信情報利⽤者発信情報ととWebWebサービスサービス
►►利⽤者発信情報を利⽤者発信情報をWebWebサービスで登録サービスで登録第三者の第三者のWebWebアプリアプリをを経由経由
Provider(ブログ)
Consumer(写真共有サイト)
利⽤者
写真
Webサービス 写真
写真
2008/1/24 7
現状の現状の問題点問題点
►►利⽤者のパスワードを使利⽤者のパスワードを使って認証って認証パスワードを悪⽤される危険性パスワードを悪⽤される危険性
Provider
Consumer
利⽤者
ID,パスワード
ID, パスワード
IDパスワード
2008/1/24 8
モチベーションモチベーション
►►対象対象利⽤者発信情報を扱う利⽤者発信情報を扱うWebWebサービスサービス
►►⽬的⽬的第三者経由での利⽤者発信情報の操作第三者経由での利⽤者発信情報の操作利⽤者のパスワードを第三者に渡さない利⽤者のパスワードを第三者に渡さない
2008/1/24 9
トークンを⽤いた認証⽅式トークンを⽤いた認証⽅式►► WebWebサービスの認証にトークンを⽤いるサービスの認証にトークンを⽤いる
WebWebサービスのサーバは利⽤者をパスワードで認証サービスのサーバは利⽤者をパスワードで認証►►普及しているとは⾔いがたい普及しているとは⾔いがたい
サービスごとに個々に実装されているサービスごとに個々に実装されている
Provider
Consumer
利⽤者
(1) ID, パスワード
(2)
トークン [Webサービス] トークン
(3)
2008/1/242008/1/24 1010
2. 2. 提案⽅式提案⽅式
2008/1/24 11
コンセプトコンセプト
►►従来の問題点従来の問題点パスワード⽅式:パスワード⽅式: 秘密情報が第三者へ秘密情報が第三者へトークン⽅式:トークン⽅式: サービス個々に実装サービス個々に実装
►►実装コストが普及の妨げではないか実装コストが普及の妨げではないか►►提案⽅式提案⽅式 (CSS2007(CSS2007で発表で発表))
安全性の向上と実装規模の削減安全性の向上と実装規模の削減SSOSSOを拡張してトークン発⾏を実現を拡張してトークン発⾏を実現
►►実装実装: OpenID: OpenIDを採⽤を採⽤
2008/1/24 12
OpenIDOpenIDの概要の概要 (1)(1)
►►OpenIDOpenID Auth 2.0 (Auth 2.0 (20072007.12).12)インターネットでのシングルサインオンインターネットでのシングルサインオンURLURLががIDID ((複数ドメインでの利⽤複数ドメインでの利⽤))
►►多数のプレイヤー多数のプレイヤーAOLAOL, , livedoorlivedoor, , はてなはてな, Sun Microsystems, Sun MicrosystemsYahoo!, Yahoo Japan! (2008.2~)Yahoo!, Yahoo Japan! (2008.2~)
2008/1/24 13
OpenIDOpenIDの概要の概要 (2)(2)
Provider(OpenID Provider)
Provider(OpenID Provider)
Consumer(Relying Party)
Consumer(Relying Party)
利⽤者
(1) ID (URL) の提⽰
(4) 認証要
求 (OpenID Request)
(5) 利⽤者
の認証 (パス
ワード)
(6) 認証応
答 (OpenID Response)
(7) 認証応答の検証
(2) Discovery
(3) 鍵共有
OpenID Authentication 2.0, Chapter 3. Protocol Overviewhttp://openid.net/specs/openid-authentication-2_0.html
2008/1/24 14
OpenIDOpenID拡張を⽤いたトークン発⾏拡張を⽤いたトークン発⾏
►►OpenIDOpenID拡張領域拡張領域トークン要求トークン要求トークン応答トークン応答
►►メッセージ⽣成メッセージ⽣成ははOpenIDOpenIDに依存に依存
ConsumerConsumer
利用者利用者
ProviderProvider
OpenIDリクエスト+ トークン要求
OpenIDレスポンス+ トークン応答
2008/1/24 15
トークンの要求トークンの要求 (Consumer)(Consumer)
►►OpenIDOpenIDリクエストの拡張領域リクエストの拡張領域►►要求するトークンの種類を指定要求するトークンの種類を指定
ConsumerConsumer
利用者利用者
ProviderProvider
OpenIDリクエスト+ トークン要求
OpenIDレスポンス+ トークン応答
操作種別操作種別「⽣成」「取得」「⽣成」「取得」「更新」「削除」「更新」「削除」
operationoperation
操作回数操作回数「「nn回」「無制限」回」「無制限」
timestimes
2008/1/24 16
トークンの発⾏トークンの発⾏ (Provider)(Provider)
►►利⽤者へトークンの発⾏可否を確認利⽤者へトークンの発⾏可否を確認►►⽣成したトークンを⽣成したトークンをDBDBへ保存へ保存
ConsumerConsumer
利用者利用者
ProviderProvider
OpenIDリクエスト+ トークン要求
OpenIDレスポンス+ トークン応答
操作種別操作種別operationoperation操作回数操作回数timestimes有効期限有効期限expireexpire
ConsumerConsumerののURLURLrealmrealm利⽤者の利⽤者のIDIDuser_iduser_id
予測不可能性を持つ予測不可能性を持つ乱数乱数
tokentoken
2008/1/24 17
トークンの応答トークンの応答 (Provider)(Provider)
►►OpenIDOpenIDレスポンスの拡張領域に付与レスポンスの拡張領域に付与►►⽣成したトークンの値を返す⽣成したトークンの値を返す
►►メッセージの改竄防⽌メッセージの改竄防⽌HMACHMACととnoncenonceを付与を付与※※ OpenIDOpenIDの仕様の仕様
ConsumerConsumer
利用者利用者
ProviderProvider
OpenIDリクエスト+ トークン要求
OpenIDレスポンス+ トークン応答
⽣成した乱数⽣成した乱数tokentoken
2008/1/24 18
利⽤者発信情報の操作利⽤者発信情報の操作 (Consumer)(Consumer)
►►WebWebサービスで利⽤者発信情報を操作サービスで利⽤者発信情報を操作具体的なプロトコルは実装依存具体的なプロトコルは実装依存
►►リクエストにトークンを付加するリクエストにトークンを付加する
token+noncetoken+nonceへのへのHMACHMAC値値signaturesignature要求ごとにインクリメントする値要求ごとにインクリメントする値noncenonce取得した乱数取得した乱数tokentoken
2008/1/242008/1/24 1919
3. 3. 実装実装
2008/1/24 20
コントローラ(Consumer/Provider)
OpenIDトークン拡張
ソフトウェア構成ソフトウェア構成
►►OpenIDOpenIDライブラリライブラリ (ruby(ruby--openid) openid) を拡張を拡張►►RubyRuby on Railson Railsのコントローラから利⽤のコントローラから利⽤
OS (Ubuntu)
Ruby 1.8.5
Ruby on Rails 2.0.1
ruby-openid 2.0.0
Ruby on Rails
Ruby on Rails
Providerコントローラ
OpenIDライブラリ
トークン拡張
Consumerコントローラ
use
2008/1/24 21
OpenIDOpenIDトークン拡張トークン拡張
►►rubyruby--openidopenidののExtensionExtensionクラスを継承クラスを継承►►トークン要求トークン要求//応答のメッセージを定義応答のメッセージを定義
OpenIDライブラリ
OpenID::Extension
OpenID::Token::Request
OpenID::Token::Response
OpenID::Token::Message
2008/1/24 22
コントローラコントローラ ((ConsumerConsumer//ProviderProvider))
►►OpenIDOpenIDライブラリを使うライブラリを使う►►ConsumerConsumer, Provider, Provider双⽅に実装双⽅に実装
トークン応答をトークン応答を受信する受信する
completecomplete
トークン要求をトークン要求を⽣成する⽣成する
beginbegin
トークン応答を⽣トークン応答を⽣成する成する
decisiondecision
トークン⽣成可否トークン⽣成可否を利⽤者に確認を利⽤者に確認
indexindex
Consumerコントローラ Providerコントローラ
2008/1/242008/1/24 2323
4. 4. 評価評価
2008/1/24 24
評価の観点評価の観点
►►実装規模がどれくらい削減できるか実装規模がどれくらい削減できるか【【提案⽅式提案⽅式】】SSOSSOを拡張する場合を拡張する場合すべて個別に実装する場合すべて個別に実装する場合
既存のOpenIDライブラリ
トークン拡張
???
SSOを拡張 個別に実装
実装規模の差
2008/1/24 25
⽐較対象⽐較対象 ((OAuthOAuth))
►►トークン発⾏の実装のトークン発⾏の実装の11つつ►►20072007年年1212⽉にリリース⽉にリリース►►認証⽅式に依存しない仕様認証⽅式に依存しない仕様
OpenIDOpenIDの拡張領域の拡張領域を使⽤するを使⽤する
OpenIDOpenID
提案⽅式提案⽅式(SSO(SSOを拡張を拡張))
依存しない依存しない認証認証独⾃に定めた仕様独⾃に定めた仕様トークン発⾏トークン発⾏
OAuthOAuth((個別に実装個別に実装))
2008/1/24 26
機能の⽐較機能の⽐較
►►トークン発⾏と取得はどちらも可能トークン発⾏と取得はどちらも可能
○○○○トークンのトークンの発⾏と取得発⾏と取得
○○(MAC,(MAC, noncenonce))
○○(MAC,(MAC, noncenonce))
メッセージのメッセージの改ざん防⽌改ざん防⽌
○○
提案⽅式提案⽅式(SSO(SSOを拡張を拡張))
仕様を拡張する仕様を拡張することで実現可ことで実現可
⽤途に応じた⽤途に応じたトークン発⾏トークン発⾏((操作種別、回数操作種別、回数))
OAuthOAuth((個別に実装個別に実装))
2008/1/24 27
実装規模実装規模 (LOC) (LOC) での⽐較での⽐較
►►トークン発⾏の実装規模はおよそトークン発⾏の実装規模はおよそ1:11:133メッセージやメッセージやMACMAC⽣成に既存機能を利⽤⽣成に既存機能を利⽤
0100200300400500600700800
SSOを拡張(提案⽅式) 個別に実装(OAuth)
トークン発⾏
Consumer
Provider
2008/1/242008/1/24 2828
5. 5. 考察考察
2008/1/24 29
まとめまとめ
►►従来の問題点従来の問題点パスワード⽅式:パスワード⽅式: 秘密情報が第三者へ秘密情報が第三者へトークン⽅式:トークン⽅式: サービス個々に実装サービス個々に実装
►►提案⽅式提案⽅式OpenIDOpenIDを拡張してトークンを発⾏を拡張してトークンを発⾏RubyRuby上で実装上で実装独⾃実装との⽐較で独⾃実装との⽐較で11//1010以下の規模以下の規模
2008/1/242008/1/24 3030
ご清聴ありがとうございましたご清聴ありがとうございました
2008/1/242008/1/24 3131
利⽤例利⽤例
2008/1/24 32
ToDoToDoリストの取得リストの取得
►►ConsumerConsumerはトークンを使ってはトークンを使ってProviderProvider上の上のToDoToDoリストを取得するリストを取得する
ToDo管理サービス(Provider)
ToDo管理サービス(Provider)
ToDo取得サービス(Consumer)
ToDo取得サービス(Consumer)
利⽤者 トークン
トークン ToDoリスト
2008/1/24 33
サンプルサンプル (Consumer)(Consumer)
2008/1/24 34
2008/1/24 35