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

3分でわかるOpen ID Connect の仕様と3年かけてもわからない Open ID Connect の実装/nikkei-tech-talk-10-1

3分でわかるOpen ID Connect の仕様と3年かけてもわからない Open ID Connect の実装/nikkei-tech-talk-10-1

2023/08/24 開催、NIKKEI Tech Talk #10 発表資料です #nikkei_tech_talk
https://nikkei.connpass.com/event/287063/
【NIKKEI Tech Talk #10】認証基盤の作り方~アーキテクチャとチームビルディング~

More Decks by 日本経済新聞社 エンジニア採用事務局

Other Decks in Technology

Transcript

  1. ハッシュタグ #nikkei_tech_talk 自己紹介 淵脇 誠 (Fuchiwaki Makoto) 3 • 競プロ: AtCoder

    2000+ Codeforces 2100+ • CTF: Crypto • 音ゲー: プロセカ、オンゲキ等 • 日経ID 認証認可基盤の開発
  2. ハッシュタグ #nikkei_tech_talk みなさん OpenID Connect をご存じですか? 6 ユーザー 日経IDシステム ID:

    [email protected] Password: p@ss123w0rd 名前: Nikkei Taro TEL: 0123-4567-8901 ① ログイン ②サービスを開く ③ ユーザー情報がサービス内に表示 簡単にいうと1個のIDで複数のサービスにログインするための標準仕様です
  3. ハッシュタグ #nikkei_tech_talk OpenID Connect OAuth 2.0 をご存じですか? 7 エンドユーザー OP:

    OpenID Provider ① RPを使いたいの でID / Passwordを 入力します! 簡単にいうと1個のIDで複数のサービスにログイン 情報を連携するための標準仕様です RP: Relying Party ②鍵1を渡すからRPを 使わせて! ③ 鍵1を鍵2に交換し てください! ④ 鍵2を渡すのでエ ンドユーザーの情報 をください! ログインが成功 すると鍵1がもら える 鍵1が正当なら鍵2 に交換できる ⑤ 鍵2が正しい か確認してくだ さい! Resource Server 名前: Nikkei Taro TEL: 0123-4567-8901 ⑥ ユーザー情報はこ れです! 鍵1: 認可コードと いわれる 鍵2: アクセストーク ンといわれる 注: OAuth 2.0 の用語
  4. ハッシュタグ #nikkei_tech_talk 1) なぜ鍵1と鍵2があるの? a) 鍵1は外部に流出しやすいのですぐに安全な鍵2に交換しています。 2) OAuth 2.0 って何?

    a) OpenID Connect のベースとなった規格です。 3) ではOpenID Connectにするにはどうすればいいの? a) 鍵2への交換時に、新たな鍵3🔑OpenIDを追加で渡します 4) 鍵3🔑OpenIDってなんで必要なの? a) 鍵2に名前が書いてないため b) 匿名の鍵しかもらえないので「RPのログイン」ができない! いくつかのTips 8
  5. ハッシュタグ #nikkei_tech_talk OpenID Connect をご存じですか? 9 エンドユーザー OP: OpenID Provider

    ① RPを使いたいの でID / Passwordを 入力します! 簡単にいうと1個のIDで複数のサービスにログインするための標準仕様です RP: Relying Party ②鍵1を渡すからRPを 使わせて! ③ 鍵1を鍵2, 鍵3に交 換してください! ⑤ 鍵2を渡すのでエ ンドユーザーの情報 をください! ログインが成功 すると鍵1がもら える 鍵1が正当なら鍵2, 鍵3 OpenIDに交換できる ⑥ 鍵2が正しい か確認してくだ さい! Resource Server 名前: Nikkei Taro TEL: 0123-4567-8901 ⑦ ユーザー情報はこ れです! 鍵1: 認可コードと いわれる 鍵2: アクセストーク ンといわれる 注: OAuth 2.0 / OpenID Connect の用語 ④ 鍵3の名 前を確認し ます! 記名式の鍵なので 「RPへのログイン」 を実現!
  6. ハッシュタグ #nikkei_tech_talk あとはOPとResource Serverといった仕様を実装す れば日経IDシステムの完成(?) 12 OP: OpenID Provider Resource

    Server 日経IDシステム • 実は仕様の罠がたくさん • 仕様そのものがない箇所も • セキュリティ問題も山積み →かれこれ3年開発している…
  7. ハッシュタグ #nikkei_tech_talk 具体的に何が難しいのか: 例 認証 13 OpenID Connectは鍵1をもらうための「認証」につ いて何も定めていない! •

    二要素認証はどうすれば? • Googleでログインはどうやれば? • ログインフォームをF5でリロードされた場合はど うすればいいのか? • ログイン用のURLを匿名掲示板に張られた場合 にどう対処すれば? エンドユーザー OP: OpenID Provider ① RPを使いたいの でID / Passwordを 入力します! ログインが成功 すると鍵1がもら える
  8. ハッシュタグ #nikkei_tech_talk 例: ログインフォームをF5でリロードされた場合はどう すればいいのか? 14 エンドユーザー OP: OpenID Provider

    ① RPを使いたいの でID / Passwordを 入力します! 表示が遅い! F5!F5!F5! 1) F5リロードでエラー画面にする a) 利用者が限定されているシステムなどではよくある b) B2C企業としてはUX低下が深刻な問題 2) Cookieを使ってセッション管理 a) 通常のサービスではベストプラクティス b) ブラウザの中で一意であり複数タブでログインをするなどが困難 3) URLのクエリパラメータでセッション管理 a) 一番開発が容易 b) 一番セキュリティが弱い このように一筋縄ではいかない。日経 IDではCookie、セッションストレージ、クエリパ ラメータといった複数の技術要素を使い個々の弱点を補強している。 他のIDプロバイダも様々な実装を行っており、苦労の跡が見受けられる。
  9. ハッシュタグ #nikkei_tech_talk ではGoogleでログインのような大きい機能は… 16 • 外部IDの同一性はどう担保すれば? • メールアドレスが変えられた場合は? • ログイン中に離脱された場合は?

    • 外部IDが退会された場合は? • 複数の外部IDを連携したい場合は? • オートログインはどうすれば? • 外部IDがログアウトされた場合は? • ユーザー情報が更新された場合は? • 外部IDが急にサービス停止した場合は? • 外部IDのAPIアップデートはどうれば? • 標準仕様に沿ってない部分は? • これらをすべて考慮しつつ独 自実装するのは大変困難 • 通常のシステムでは既存の 製品を使うのが正解 • しかし大規模B2C企業にとっ ては「ログイン」は生命線であ りこれらをすべて考慮し内製 開発を決断