Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OpenID Connect
これが最新のOpenID仕様だッ!
Ryo Ito (@ritou)
YAPC::Asia Tokyo 2013
自己紹介
● Ryo Ito (@ritou)
○ 株式会社ミクシィ 研究開発グループ
○ OpenID ファウンデーション・ジャパン エヴァンジェリスト
○ http://d.hatena.ne.jp/ritou/
○ @IT デジタル・アイ...
1. OpenID Connectとは?
OpenIDとOAuthの違い
● OpenID : 異なるサービス間でユーザーの認証
情報をやりとりする仕様
● OAuth : 異なるサービス間でAPIアクセスを実
現するしくみ
アイデンティティ技術のトレンド
● Webアプリ間でアカウント連携
○ OpenID 2.0
○ 2008年頃から
● Webアプリ間のAPI連携
○ OAuth 1.0
○ 2009年頃から
● Webアプリ + ネイティブアプリ間のAPI連...
OAuth認証とは
● OAuthはAPIアクセスのための仕様だが・・・
● プロフィールAPIでユーザー識別子を取得して
SSOに使っちゃおう!!!的な発想
OAuth認証とは
● OAuthはAPIアクセスのための仕様だが・・・
● プロフィールAPIでユーザー識別子を取得して
SSOに使っちゃおう!!!的な発想
○ 独自API
○ OAuth 2.0ではモバイルアプリに広く使われるフローで
セキ...
OpenID Connectとは
● OAuth 2.0をベースに, アイデンティティ層を拡
張した仕様
○ 認証結果の受け渡し + APIアクセス認可を同時に行う
● OpenIDファウンデーションで仕様策定中
○ 現在Implementer...
難しそう?
ミニマムな実装としては, 下記の2点だけ
● ID Tokenで認証/認可情報を受け渡し
● 標準的な属性情報提供API
Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html
OPにリダイレクトして同意
Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html
POST リクエストを送り、
アクセストークンと
ID Tokenを取得
Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html
メールアドレスなど
属性情報を取得
認証/認可の情報を含むID Token
● 認可情報
○ どこの : OP識別子
○ だれが : ユーザー識別子
○ いつ : タイムスタンプ
○ どこに : RP識別子
● 認証の情報
○ 認証時刻
○ 認証方式
トークン文字列はJSON Web Token形式
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsIn
N1YiI6I...
トークン文字列はJSON Web Token形式
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
↑メタデータをBase64 URL エンコードしたもの
. ←ピリオドで連結
eyJpc3MiOiJodHRwczovL...
ユーザーの属性情報を提供するAPI
scopeの値に関連付けられた属性情報を提供
● openid : ユーザー識別子
● profile : プロフィール情報
● email : メアド + 確認状態
● phone : 電話番号 + 確認状...
その他
● 動的なRP登録, 探索
● ユーザー認証周りのリクエストパラメータ
● 署名つき/暗号化されたリクエスト
● 属性情報の集約/分散
モバイル端末とIdentity
モバイル端末自体の識別はけっこう難しい
● デバイス固有な識別子?
○ かんたんログインのセキュリティ/プライバシー問題
● ある程度セキュアな領域は提供されている
○ iOS KeyChain
○ Androi...
Self-Issued OP : デバイス内OP
モバイル/WebアプリはカスタムURIスキームにて
リクエストを送信
● openid://
端末内でOPとして動作するアプリ or Native機能
がOPとなる
● デバイス内でユニークな鍵...
Self-Issued OP : デバイス内OP
利用するモバイル/Webアプリのメリット
● 公開鍵のハッシュ値から、どの端末を利用して
いるかを識別可能
● タイムスタンプ/署名により改ざんが難しい
● ユーザーの同意を得るしくみがある
Self-Issued OP : デバイス内OP
いくつか課題が残っている
● 信頼性(OS機能じゃないとNG?)
● 名寄せ防止のための複数の鍵ペア生成
ネイティブアプリを作っていてより厳密なデバイス
識別をやりたいところは使えると思う
2. OIDC::Lite
OIDC::Lite
● OAuth 2.0のServer/Client向けライブラリであ
るOAuth::Lite2を拡張
● https://metacpan.org/module/OIDC::Lite
● https://github.c...
Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html
RP(Client)向け機能
● 認可要求のURL生成
● アクセストークン、IDトークンの要求
● レスポンスの検証
LWP使って手動でリクエストを書き, レスポンスを
JSONデコードするよりは楽
OP(Server)向け機能
● 各エンドポイント毎に”一連の手続き”を実装
● Authorization Endpoint
○ リクエストパラメータの検証
○ ユーザー同意/拒否後のレスポンス生成
○ 同意画面表示のあたりで上記メソッドを使...
OP(Server)向け機能
利用者が行うこと
● Access Token(アクセストークン), AuthInfo(認
可情報)の保存部分などを実装
○ あらかじめ用意されているのはアクセサのみ
○ DBに入れたりキャッシュに保存したり
● ...
難しそう?
● サンプルOP/RP作りました
○ https://github.com/ritou/p5-oidc-lite-demo-server
○ https://github.com/ritou/p5-oidc-lite-demo-cl...
サンプルOP/RP
● 目的
○ ライブラリの使い勝手を確認
○ OP/RPの実装例を公開
○ 誰でもInterop!
● carton install + plackupで簡単に起動
サンプルOP :
Authorization Requestの表示
サンプルOP :
Authorization Responseの表示
サンプルRP :
Access Token Req/Resの表示
サンプルRP :
ID Tokenの内容/属性情報の表示
まとめ
● OpenID Connect
○ OAuth 2.0にIdentity層を追加する拡張
○ ミニマムな実装はID Tokenと属性提供API
○ Self-Issued OPでデバイス特定
● OIDC::Lite
○ OAuth:...
終わり
OpenIDやOAuthについての質問や疑問がありま
したら @ritou までお気軽に声をかけてください!!!
YAPC::Tokyo 2013 ritou OpenID Connect
YAPC::Tokyo 2013 ritou OpenID Connect
Upcoming SlideShare
Loading in …5
×

YAPC::Tokyo 2013 ritou OpenID Connect

11,990 views

Published on

Published in: Technology

YAPC::Tokyo 2013 ritou OpenID Connect

  1. 1. OpenID Connect これが最新のOpenID仕様だッ! Ryo Ito (@ritou) YAPC::Asia Tokyo 2013
  2. 2. 自己紹介 ● Ryo Ito (@ritou) ○ 株式会社ミクシィ 研究開発グループ ○ OpenID ファウンデーション・ジャパン エヴァンジェリスト ○ http://d.hatena.ne.jp/ritou/ ○ @IT デジタル・アイデンティティ技術最新動向 「OpenID Connect」を理解する http://www.atmarkit.co. jp/ait/articles/1209/27/news138.html
  3. 3. 1. OpenID Connectとは?
  4. 4. OpenIDとOAuthの違い ● OpenID : 異なるサービス間でユーザーの認証 情報をやりとりする仕様 ● OAuth : 異なるサービス間でAPIアクセスを実 現するしくみ
  5. 5. アイデンティティ技術のトレンド ● Webアプリ間でアカウント連携 ○ OpenID 2.0 ○ 2008年頃から ● Webアプリ間のAPI連携 ○ OAuth 1.0 ○ 2009年頃から ● Webアプリ + ネイティブアプリ間のAPI連携 ○ OAuth 2.0 ○ 2010年頃から
  6. 6. OAuth認証とは ● OAuthはAPIアクセスのための仕様だが・・・ ● プロフィールAPIでユーザー識別子を取得して SSOに使っちゃおう!!!的な発想
  7. 7. OAuth認証とは ● OAuthはAPIアクセスのための仕様だが・・・ ● プロフィールAPIでユーザー識別子を取得して SSOに使っちゃおう!!!的な発想 ○ 独自API ○ OAuth 2.0ではモバイルアプリに広く使われるフローで セキュリティリスクが発生
  8. 8. OpenID Connectとは ● OAuth 2.0をベースに, アイデンティティ層を拡 張した仕様 ○ 認証結果の受け渡し + APIアクセス認可を同時に行う ● OpenIDファウンデーションで仕様策定中 ○ 現在Implementer's Draft ○ 日本人も関わっている
  9. 9. 難しそう? ミニマムな実装としては, 下記の2点だけ ● ID Tokenで認証/認可情報を受け渡し ● 標準的な属性情報提供API
  10. 10. Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html OPにリダイレクトして同意
  11. 11. Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html POST リクエストを送り、 アクセストークンと ID Tokenを取得
  12. 12. Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html メールアドレスなど 属性情報を取得
  13. 13. 認証/認可の情報を含むID Token ● 認可情報 ○ どこの : OP識別子 ○ だれが : ユーザー識別子 ○ いつ : タイムスタンプ ○ どこに : RP識別子 ● 認証の情報 ○ 認証時刻 ○ 認証方式
  14. 14. トークン文字列はJSON Web Token形式 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsIn N1YiI6IjI0NDAwMzIwIiwiYXVkIjoiczZCaGRSa3F0MyIsIm5v bmNlIjoibi0wUzZfV3pBMk1qIiwiZXhwIjoxMzExMjgxOTcwL CJpYXQiOjEzMTEyODA5NzAsImF1dGhfdGltZSI6MTMxM TI4MDk2OSwidHlwIjoiSldUIn0 . LbJA_DmSR5R3Sa79xqtG9sU8uy1Sm8KG1V8VBJOby4E
  15. 15. トークン文字列はJSON Web Token形式 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 ↑メタデータをBase64 URL エンコードしたもの . ←ピリオドで連結 eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsIn N1YiI6IjI0NDAwMzIwIiwiYXVkIjoiczZCaGRSa3F0MyIsIm5v bmNlIjoibi0wUzZfV3pBMk1qIiwiZXhwIjoxMzExMjgxOTcwL CJpYXQiOjEzMTEyODA5NzAsImF1dGhfdGltZSI6MTMxM TI4MDk2OSwidHlwIjoiSldUIn0 ↑送りたいデータをBase64 URL エンコードしたもの . LbJA_DmSR5R3Sa79xqtG9sU8uy1Sm8KG1V8VBJOby4E ↑署名をBase64 URLエンコードしたもの
  16. 16. ユーザーの属性情報を提供するAPI scopeの値に関連付けられた属性情報を提供 ● openid : ユーザー識別子 ● profile : プロフィール情報 ● email : メアド + 確認状態 ● phone : 電話番号 + 確認状態 ● address : 住所情報
  17. 17. その他 ● 動的なRP登録, 探索 ● ユーザー認証周りのリクエストパラメータ ● 署名つき/暗号化されたリクエスト ● 属性情報の集約/分散
  18. 18. モバイル端末とIdentity モバイル端末自体の識別はけっこう難しい ● デバイス固有な識別子? ○ かんたんログインのセキュリティ/プライバシー問題 ● ある程度セキュアな領域は提供されている ○ iOS KeyChain ○ Android KeyStore
  19. 19. Self-Issued OP : デバイス内OP モバイル/WebアプリはカスタムURIスキームにて リクエストを送信 ● openid:// 端末内でOPとして動作するアプリ or Native機能 がOPとなる ● デバイス内でユニークな鍵ペアを生成 ● 公開鍵をPayloadに含む ● 秘密鍵で署名してID Tokenを作成
  20. 20. Self-Issued OP : デバイス内OP 利用するモバイル/Webアプリのメリット ● 公開鍵のハッシュ値から、どの端末を利用して いるかを識別可能 ● タイムスタンプ/署名により改ざんが難しい ● ユーザーの同意を得るしくみがある
  21. 21. Self-Issued OP : デバイス内OP いくつか課題が残っている ● 信頼性(OS機能じゃないとNG?) ● 名寄せ防止のための複数の鍵ペア生成 ネイティブアプリを作っていてより厳密なデバイス 識別をやりたいところは使えると思う
  22. 22. 2. OIDC::Lite
  23. 23. OIDC::Lite ● OAuth 2.0のServer/Client向けライブラリであ るOAuth::Lite2を拡張 ● https://metacpan.org/module/OIDC::Lite ● https://github.com/ritou/p5-oidc-lite
  24. 24. Source : http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html
  25. 25. RP(Client)向け機能 ● 認可要求のURL生成 ● アクセストークン、IDトークンの要求 ● レスポンスの検証 LWP使って手動でリクエストを書き, レスポンスを JSONデコードするよりは楽
  26. 26. OP(Server)向け機能 ● 各エンドポイント毎に”一連の手続き”を実装 ● Authorization Endpoint ○ リクエストパラメータの検証 ○ ユーザー同意/拒否後のレスポンス生成 ○ 同意画面表示のあたりで上記メソッドを使う ● Token Endpoint ○ 各grant_type単位の処理を実装 ○ psgiアプリケーション ● Protected Resource ○ Access Tokenを検証しユーザーIDなどをAPIに必要な 値を環境変数にセット ○ PlackのMiddleware
  27. 27. OP(Server)向け機能 利用者が行うこと ● Access Token(アクセストークン), AuthInfo(認 可情報)の保存部分などを実装 ○ あらかじめ用意されているのはアクセサのみ ○ DBに入れたりキャッシュに保存したり ● DataHandlerに定義されている処理を実装 ○ client_idなどの検証 ○ 上記クラスの生成/更新処理
  28. 28. 難しそう? ● サンプルOP/RP作りました ○ https://github.com/ritou/p5-oidc-lite-demo-server ○ https://github.com/ritou/p5-oidc-lite-demo-client ● デモ ○ http://demo-client.openidconnect.info/ ○ http://demo-server.openidconnect.info/ ● ブログエントリも書きました ○ http://d.hatena.ne.jp/ritou/
  29. 29. サンプルOP/RP ● 目的 ○ ライブラリの使い勝手を確認 ○ OP/RPの実装例を公開 ○ 誰でもInterop! ● carton install + plackupで簡単に起動
  30. 30. サンプルOP : Authorization Requestの表示
  31. 31. サンプルOP : Authorization Responseの表示
  32. 32. サンプルRP : Access Token Req/Resの表示
  33. 33. サンプルRP : ID Tokenの内容/属性情報の表示
  34. 34. まとめ ● OpenID Connect ○ OAuth 2.0にIdentity層を追加する拡張 ○ ミニマムな実装はID Tokenと属性提供API ○ Self-Issued OPでデバイス特定 ● OIDC::Lite ○ OAuth::Lite2を拡張したOP/RP向けライブラリ ○ サンプルOP/RPもあります
  35. 35. 終わり OpenIDやOAuthについての質問や疑問がありま したら @ritou までお気軽に声をかけてください!!!

×