Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OAuth/OpenID Connectを用いてID連携を実装するときに気を付けること #yapcasia

ritou
August 30, 2014

OAuth/OpenID Connectを用いてID連携を実装するときに気を付けること #yapcasia

YAPC::Asia Tokyo 2014 で話したスライドです。
http://yapcasia.org/2014/talk/show/cc57f3ca-01b8-11e4-b7e8-e4a96aeab6a4

ritou

August 30, 2014
Tweet

More Decks by ritou

Other Decks in Technology

Transcript

  1. 自己紹介 • Ryo Ito (@ritou) ← あーるいとう or りとう •

    OpenID Foundation Japan : Evangelist • http://www.openid.or.jp/ • エンジニア@株式会社ミクシィ • CPAN • OAuth::Lite2 • OIDC::Lite YAPC::Asia Tokyo 2014 4
  2. 連携キャンセル時の挙動 • 果たしてエラーなのか?ユーザーの意図は? • Permission多すぎでやめた -> 使うのやめたい • このアカウントじゃなかった! ->

    やりなおしたい • error=access_denied などで判別可能 • 次のアクションにつなげられるようにすべき YAPC::Asia Tokyo 2014 13
  3. WebアプリとCSRF • OAuthのセキュリティ強化を目的とする拡張仕様を 導入しました - mixi Engineers' Blog • http://alpha.mixi.co.jp/entry/2013/12020/

    • 最初の部分でこの問題について触れている • OAuth2.0で強制連携させるCSRFの影響と、その対 策について • http://subtech.g.hatena.ne.jp/mala/20140724/1406209 989 YAPC::Asia Tokyo 2014 19
  4. ネイティブアプリとソーシャルログイン YAPC::Asia Tokyo 2014 25 User Native App IdP Backend

    Server 「◦◦でログイン」 認証処理、アクセス権限への同意など トークンなどをやりとり Backend Serverに 送信 ログイン情報など ユーザー識別子を要求
  5. SDKなどで取得したAccess Tokenを送信 • 大手BaaSでも採用されている方式 • SDKやOSネイティブ機能でAccess Tokenを受け取る • 「Token Replace

    Attack(置換攻撃)」のリスク • 他のアプリ向けのAccess Tokenによりアカウントののっ とりが行われる可能性がある • バックエンドサーバーは必ずそのAccess Tokenが 自らのアプリに対して発行されたことを確認する • 通信路が云々… YAPC::Asia Tokyo 2014 27
  6. SDKなどで取得したAccess Tokenを送信 YAPC::Asia Tokyo 2014 28 User Native App IdP

    Backend Server 「◦◦でログイン」 (SDK)認証処理、アクセス権限への同意など Access Token要求 Backend Serverに Acess Tokenを送信 ログイン情報など Access Tokenの発行先を確認 ユーザー識別子を要求
  7. (UI)WebViewでWebアプリ向けの Authorization Codeを取得して送信 • 昔から行われている方式の一つ • Client Credential(Client Secret)をアプリで持つ必要 がないことは良い

    • Authorization Code -> Access Tokenの変換はバックエン ドサーバーが行う • WebViewで外部サービスの画面表示するのは フィッシングなどの面から良くない YAPC::Asia Tokyo 2014 29
  8. (UI)WebViewでWebアプリ向けの Authorization Codeを取得して送信 YAPC::Asia Tokyo 2014 30 User Native App

    IdP Backend Server 「◦◦でログイン」 (WebView)認証処理、アクセス権限への同意など Authorization Code取得 Backend ServerにAuthorization Codeを送信 ログイン情報など Access Tokenと交換 ユーザー識別子を要求
  9. Googleの場合 • GoogleではProjectに複数Clientがぶら下がる • Webアプリ • iOSアプリ • Androidアプリ •

    ネイティブアプリ向けSDKからWebアプリ向けの Authorization Codeを取得可能 • バックエンドサーバーがAuthorization CodeからAccess Tokenに変換 • (おまけ)ユーザー識別子の取得だけならID Tokenを利 用するのが便利(OpenID Connect仕様をサポート) YAPC::Asia Tokyo 2014 32
  10. Googleの場合 YAPC::Asia Tokyo 2014 33 User Native App IdP Backend

    Server 「◦◦でログイン」 (SDK)認証処理、アクセス権限への同意など Authorization Code取得 Backend ServerにAuthorization Codeを送信 ログイン情報など Access Tokenと交換 ユーザー識別子を要求
  11. ソーシャルログインにより どの機能を省略(代替)する? • 認証 • 全ての認証 • 最初のログインで全ての機能が使える • 強度の低い認証

    • 最初のログインである程度までの機能が使える • 重要な処理の前に二段階認証や、パスワード確認 • メールアドレス確認 • Googleが自社で提供しているGmailのメアド • Facebookが確認済みのメアド • 属性情報の入力 • 姓名、ニックネームなど YAPC::Asia Tokyo 2014 36
  12. mixiのユーザー登録/認証 • 登録時の確認項目 • メールアドレス : 確認用メールの送信 • 電話番号の確認 :

    SMS/IVR • メールアドレス/パスワードで認証 • 各種設定変更やセンシティブな処理の前にパス ワード確認 YAPC::Asia Tokyo 2014 43
  13. mixiのユーザー登録/認証 • 登録時の確認項目 • メールアドレス : 確認用メールの送信 • 電話番号の確認 :

    SMS/IVR • メールアドレス/パスワードで認証 • 各種設定変更やセンシティブな処理の前にパス ワード確認 • ↑パスワード撤廃失敗 YAPC::Asia Tokyo 2014 44