$30 off During Our Annual Pro Sale. View Details »

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. 2023/08/24
    日本経済新聞社 淵脇 誠
    【セッション1】
    3分でわかるOpen ID Connect の仕様と
    3年かけてもわからない Open ID Connect の実装
    NIKKEI TECH TALK #10

    View Slide

  2. ハッシュタグ #nikkei_tech_talk
    ● 音声は聞こえていますか 󰢏🙆
    ● チャットで気軽にコメントください 🎉
    ● ツイート、画面キャプチャーOKです 🤳📷
    ● まずは、このQRコードからツイート
    してみてください
    ● ハッシュタグ #nikkei_tech_talk
    NIKKEI TECH TALK
    2

    View Slide

  3. ハッシュタグ #nikkei_tech_talk
    自己紹介 淵脇 誠 (Fuchiwaki Makoto)
    3
    ● 競プロ: AtCoder 2000+ Codeforces 2100+
    ● CTF: Crypto
    ● 音ゲー: プロセカ、オンゲキ等
    ● 日経ID 認証認可基盤の開発

    View Slide

  4. ハッシュタグ #nikkei_tech_talk
    ● OpenID Connect の仕様(光)をお話しします
    ● OpenID Connect の実装(闇)をお話しします
    NIKKEI TECH TALK: Session 1 では...
    4

    View Slide

  5. ハッシュタグ #nikkei_tech_talk 5
    3分でわかるOpenID Connect の仕様(光)

    View Slide

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

    View Slide

  7. ハッシュタグ #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 の用語

    View Slide

  8. ハッシュタグ #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

    View Slide

  9. ハッシュタグ #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へのログイン」
    を実現!

    View Slide

  10. ハッシュタグ #nikkei_tech_talk 10
    OpenID Connect が3分でわかった!
    ※ 複雑な仕様なので完璧に理解するのは難しいと思います。興味のある人はもっと調べてみてください!

    View Slide

  11. ハッシュタグ #nikkei_tech_talk 11
    3年かけてもわからない Open ID Connect の実装(闇)

    View Slide

  12. ハッシュタグ #nikkei_tech_talk
    あとはOPとResource Serverといった仕様を実装す
    れば日経IDシステムの完成(?)
    12
    OP: OpenID Provider Resource Server

    日経IDシステム
    ● 実は仕様の罠がたくさん
    ● 仕様そのものがない箇所も
    ● セキュリティ問題も山積み
    →かれこれ3年開発している…

    View Slide

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

    View Slide

  14. ハッシュタグ #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プロバイダも様々な実装を行っており、苦労の跡が見受けられる。

    View Slide

  15. ハッシュタグ #nikkei_tech_talk
    こんな細かい問題一つでも課題が山積み
    15
    ● F5リロードの問題はWebサービスとしては非常に典型的な問題だ
    が、そんな典型的な問題ですらログインという特殊な用途ではベスト
    プラクティスが存在しない
    ● B2Cサービスのログイン(認証)はセキュリティとUXというしばしば矛
    盾する要素の両立が求められ、開発難易度が段違い

    View Slide

  16. ハッシュタグ #nikkei_tech_talk
    ではGoogleでログインのような大きい機能は…
    16
    ● 外部IDの同一性はどう担保すれば?
    ● メールアドレスが変えられた場合は?
    ● ログイン中に離脱された場合は?
    ● 外部IDが退会された場合は?
    ● 複数の外部IDを連携したい場合は?
    ● オートログインはどうすれば?
    ● 外部IDがログアウトされた場合は?
    ● ユーザー情報が更新された場合は?
    ● 外部IDが急にサービス停止した場合は?
    ● 外部IDのAPIアップデートはどうれば?
    ● 標準仕様に沿ってない部分は?
    ● これらをすべて考慮しつつ独
    自実装するのは大変困難
    ● 通常のシステムでは既存の
    製品を使うのが正解
    ● しかし大規模B2C企業にとっ
    ては「ログイン」は生命線であ
    りこれらをすべて考慮し内製
    開発を決断

    View Slide

  17. 17
    その結果...

    View Slide

  18. 18
    3年経ってようやくリリース🎉

    View Slide

  19. 19
    3年経ってようやくリリース
    → まだまだ残課題はいっぱい
    → Googleでログインもその一つ

    View Slide

  20. 20
    3年経ってようやくリリース🎉
    3年かけても Open ID Connect の実装はわからないとこ
    ろだらけですが様々なアップデートをすべく鋭意開発中で
    す!

    View Slide

  21. 21
    ありがとうございました

    View Slide