これからのネイティブアプリにおけるOpenID Connectの活用

12,865 views

Published on

タイトル:
『これからのネイティブアプリにおけるOpenID Connectの活用』

概要:
 近年モバイルアプリケーションの多くはログインを必須としています。自社他社提供のWeb APIの利用にあたりクライアントサイド、サーバーサイドのそれぞれにおいて認証の仕組みを理解し、正しい認証の実装が求められます。
 本セッションではユーザーとデバイスの2つの視点でモバイルにおける認証をご紹介します。
ユーザー認証のパートでは、OAuth 2.0ベースのID連携の問題点に触れ、その課題を解決するためのOpenID Connectの仕様について解説します。
デバイス認証のパートでは、スマートフォンやタブレットを識別するための仕様の解説と活用方法について解説します。

Developers Summit 2014 【13-C-5】 Feb. 13, 2014
URL: https://event.shoeisha.jp/devsumi/20140213/session/383/

Published in: Internet
0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,865
On SlideShare
0
From Embeds
0
Number of Embeds
1,066
Actions
Shares
0
Downloads
159
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

これからのネイティブアプリにおけるOpenID Connectの活用

  1. 1. これからのネイティブアプリにおける OpenID Connectの活用 @kura_lab @nov
  2. 2. 倉林 雅(通称: kura) OpenID ファウンデーション・ジャパン Copyright 2013 OpenID Foundation Japan - All Rights Reserved. エバンジェリスト ヤフー株式会社 IDサービス エンジニア ID厨 @kura_lab
  3. 3. Nov Matake OpenID Foundation Japan Evangelist 初号機 OAuth.jp Idcon Rubyist fb_graph, rack-oauth2, openid_connect etc. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  4. 4. OpenID ファウンデーション・ジャパン 2008年設立 OpenID TechNight 翻訳・教育 WG トラストフレームワーク WG Enterprise Identity WG Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  5. 5. Japan Identity Cloud Summit Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  6. 6. #idcon Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  7. 7. OpenID Connect x ユーザー認証 @kura_lab
  8. 8. これまでつくったアプリを 思い出してみよう Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone Apps by AxsDeny
  9. 9. Facebookログインを つかってますか? Copyright 2013 OpenID Foundation Japan - All Rights Reserved. click click by Tim Franklin Photography
  10. 10. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  11. 11. OAuth 2.0 の Implicit フロー Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  12. 12. User’s Browser Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
  13. 13. Your App Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
  14. 14. Facebook Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
  15. 15. アプリ表示 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
  16. 16. ダイアログ表示 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
  17. 17. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. access token 取得 Source: developers.facebook.com
  18. 18. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. APIリクエスト Source: developers.facebook.com
  19. 19. トークン置き換え攻撃 の脆弱性 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  20. 20. トークン置き換え攻撃 の脆弱性 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 ネイティブアプリの多くはバックエンドに 自前のサーバーがあり通信を行う アプリからバックエンドサーバーにアクセストークンを 送って認証すると脆弱性が生まれる
  21. 21. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Your Server GET /me User Info : Source: developers.facebook.com Your App
  22. 22. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Weak Point Source: developers.facebook.com
  23. 23. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : access token トークン置き換え Source: developers.facebook.com
  24. 24. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : access token トークン置き換え Source: developers.facebook.com 【メモ】 悪意ある開発者が別のアプリで他人のアクセストークンを取得する そのアクセストークンを置き換えてバックエンドサーバーに送信する
  25. 25. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com × 他人のユーザデータ
  26. 26. アクセストークンを発行したクライアントを検証せずに ユーザ情報を取得してしまうと謝ったユーザで認証を行ってしまう Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com 【メモ】 × 他人のユーザデータ
  27. 27. クライアントの制限 Audience Restriction Copyright 2013 OpenID Foundation Japan - All Rights Reserved. security checked at Schiphol by sharyn morrow
  28. 28. 【メモ】 前述のImplicitフローはSDKで実装されるケースが多いが、 バックエンドサーバにアクセストークンを渡すことを想定していない クライアントの制限をせずにトークンを受け入れると問題が発生する クライアントの制限 Audience Restriction Copyright 2013 OpenID Foundation Japan - All Rights Reserved. security checked at Schiphol by sharyn morrow
  29. 29. ID Token? Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Question Mark Block by Jared Cherup
  30. 30. ID Token? Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Question Mark Block by Jared Cherup 【メモ】 Implicitを使ってサーバーサイドで認証を行う際には OpenID Connectの仕様にあるID Tokenを用いることで トークン置き換え攻撃の脆弱性を防ぐことができる
  31. 31. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  32. 32. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 OpenID Connectで用いられるid_tokenパラメーターのサンプル
  33. 33. JSONオブジェクト, Base64 eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  34. 34. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ヘッダー部
  35. 35. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ペイロード部
  36. 36. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm NvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF WFOEjXk 署名, HMAC-SHA256 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  37. 37. JSONオブジェクト {“typ”:”JWT”, “alg”:"HS256"} ! {“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380} Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ヘッダー部 ペイロード部
  38. 38. iss: issuer, トークンの発行者 aud: audience, クライアント識別子 sub: subject, ユーザー識別子 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  39. 39. {“typ”:”JWT”, “alg”:"HS256"} ! {“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380} Copyright 2013 OpenID Foundation Japan - All Rights Reserved. audience = クライアント識別子
  40. 40. ID Tokenでわかること isser が audience のために subject を認証する Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  41. 41. ID Tokenでわかること isser が audience のために subject を認証する Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 サーバーサイドでID Tokenを受け取りaudienceを検証することで 他のアプリで発行されたトークンと区別することができる
  42. 42. リプレイアタックの対処法 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
  43. 43. リプレイアタックの対処法 【メモ】 サーバーサイドでトークンの検証をおこなうため リプレイアタックの対策をしなければならない Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
  44. 44. nonce = number used once Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  45. 45. nonce = number used once Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 ID Tokenにはリプレイアタック対策のnonceが導入されている
  46. 46. {“typ”:”JWT”, “alg”:"HS256"} ! {“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380} Copyright 2013 OpenID Foundation Japan - All Rights Reserved. リクエストごとに ユニークな文字列
  47. 47. ID Tokenで対策 トークン置き換え攻撃 リプレイアタック Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Armour on display in the War Gallery by Royal Armouries
  48. 48. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com
  49. 49. nonceを生成リクエスト Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com
  50. 50. access token ID Token (nonce) Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com
  51. 51. ID Token (nonce) Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com トークン置き換え
  52. 52. 【メモ】 前述の脆弱性の例ではアクセストークンをサーバーに送信していたが アクセストークンは認証のための仕組みではないため利用しない かわりにID Tokenを送信して検証する ID Token (nonce) Copyright 2013 OpenID Foundation Japan - All Rights Reserved. GET /me User Info : Source: developers.facebook.com トークン置き換え
  53. 53. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ID Token (nonce) GET /me 検User 証でInfo 不正を防止 : Source: developers.facebook.com
  54. 54. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ID Token (nonce) GET /me 検User 証でInfo 不正を防止 : Source: developers.facebook.com 【メモ】 署名の検証、audienceなどをチェックして 問題なければログイン状態にする
  55. 55. ネイティブアプリに 鍵を埋め込む? Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
  56. 56. ネイティブアプリに 鍵を埋め込む? 【メモ】 ここまでサーバーサイドでの認証をみてきたがクライアントサイドに注目 ID Tokenにおける署名検証に用いる鍵についての紹介 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
  57. 57. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 署名? HMAC-SHA1? HMAC-SHA256?
  58. 58. 共通鍵暗号と公開鍵暗号 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  59. 59. 共通鍵暗号と公開鍵暗号 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 署名検証に共通鍵暗号を用いた場合は署名生成時と同一の鍵で検証する 公開鍵暗号を用いた場合は署名生成時に用いた秘密鍵ではなく 公開鍵を用いて検証する
  60. 60. ネイティブアプリに 共通鍵(secret)を 埋め込むべきではない Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  61. 61. ネイティブアプリに 共通鍵(secret)を 埋め込むべきではない Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 署名に共通鍵暗号を用いる場合は 鍵が漏洩すると署名を偽装されてしまう危険性がある
  62. 62. ID Token 暗号化アルゴリズム Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Security by jan.gosmann
  63. 63. HMAC RSA ECDSA Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 共通鍵暗号 公開鍵暗号 ! ※現在のDraft
  64. 64. 公開鍵暗号の署名検証 共通鍵(secret)を 埋め込む必要がなくなる Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  65. 65. 公開鍵暗号の署名検証 共通鍵(secret)を 埋め込む必要がなくなる Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 【メモ】 サーバーサイドでは鍵の漏洩しにくいため共通鍵暗号でもよい ネイティブアプリではアプリ内部をのぞかれる可能性があるため 漏洩してもよい公開鍵暗号を選択するとよい
  66. 66. ID Tokenで ユーザー認証を! Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Passport by jpmatth
  67. 67. ID Token + OAuth 2.0 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  68. 68. OpenID Connect Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  69. 69. Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 2011~
  70. 70. 詳しくは http://openid.net/connect/ Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  71. 71. OpenID Connect x Device AuthN @nov
  72. 72. Developer  Device IDs
  73. 73. Device IDs iOS UDID (dead) UUID Vendor Identifier Advertising Identifier Device Token (push) Copyright 2013 OpenID Foundation Japan - All Rights Reserved. ! Android Android ID others?
  74. 74. http://www.atmarkit.co.jp/ait/articles/1211/06/news004.html
  75. 75. Developer  Bearer Tokens
  76. 76. Bearer Tokens そのトークンを所有しているという事実が そのトークンを利用するための唯一の条件 ! ! ! 漏れたらオワリ プロキシ挟めば書き換え可能 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  77. 77. v.s
  78. 78. Developer  公開鍵暗号
  79. 79. 公開鍵暗号(こうかいかぎあんごう、Public key cryptosystem) とは、暗号化と復号に別個の鍵(手順)を使い、暗号化の為の鍵を 公開できるようにした暗号方式である。1980年代にかけ、日本で 紹介された直後は「公衆暗号系」と訳されていた。 暗号は通信の秘匿性を高めるための手段だが、それに必須の鍵もま た情報なので、鍵自体を受け渡す過程で盗聴されてしまうリスクが あり、秘匿性を高める障害だった。この問題に対して、暗号化鍵の 配送問題を解決したのが公開鍵暗号である。 Copyright 2013 OpenID Foundation Japan - All Rights Reserved. http://ja.wikipedia.org/wiki/公開鍵暗号
  80. 80. 秘密鍵を渡さずに ! 公開鍵だけを渡して ! 秘密鍵を持っていることを証明できる Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  81. 81. デバイス上のKeyChainに 鍵ペアを生成すれば 秘密鍵を渡さずに ! 公開鍵だけを渡して ! 秘密鍵を持ってるデバイスを認証できる …こういうのを HoK (Holder of Key) 方式とか言うらしい Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  82. 82. Self-Issued IdP ID Token ベース Subject (sub) は公開鍵のハッシュ値 (SHA256) 公開鍵自体を ID Token に含める 秘密鍵使って署名 詳しくは OpenID Connect Core - Section 7 参照 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  83. 83. セキュアストレージ バックアップ可能 iCloud 連携も可能 RSA Key Pair 生成 RSA 署名処理 iOS is ready.
  84. 84. Self-Issued IdP ID Token ベース Subject (sub) は公開鍵のハッシュ値 (SHA256) 公開鍵自体を ID Token に含める 秘密鍵使って署名 詳しくは OpenID Connect Core - Section 7 参照 Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
  85. 85. Developer  Device IDs
  86. 86. Action!! Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Festival of Fools by Jett Loe
  87. 87. 2014.2.25 OpenID Connect 仕様最終版へ!! Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Nate and Birthday Cake (2 of 5) by Chris Pencis
  88. 88. 日本語翻訳準備中… Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Dictionary by Chris
  89. 89. 2014.3.7 OpenID TechNight @nov Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Join Us! by Doran

×