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

「OAuth/OIDC 化」の考えかた

「OAuth/OIDC 化」の考えかた

Prepared for OAuth & OpenID Connect 勉強会by Authlete - OAuth/OIDC 機能の組み込みかた https://www.authlete.com/ja/resources/videos/20240828/

複数サービスの ID をどれかひとつに寄せたい、自社の独自 SSO/API 認可機構に不安がある、外部の SaaS が OIDC RP(リライングパーティ)として動作する…などさまざまな理由から、既存のサービスや会員基盤の「OAuth/OIDC 化」を検討するケースは少なくありません。本セッションでは、「OAuth/OIDC 化」へのアプローチを概観します。

Avatar for Tatsuo Kudo

Tatsuo Kudo

August 28, 2024
Tweet

More Decks by Tatsuo Kudo

Other Decks in Technology

Transcript

  1. 2 OAuth/OIDCのおさらい OpenID Provider (OP) Resource Owner User Agent Relying

    Party (RP) Authorization / Token EP UserInfo EP 認証リクエスト (スコープ + クレーム) 認証レスポンス (認可コード) Authorization Code Flow w/ Userinfo の例 • OpenID Connect: 「IDトークン」を 用いた「ID連携プロトコル」 ユーザーのことを 知りたい トークンリクエスト (認可コード) トークンレスポンス (アクセストークン + IDトークン) IDトークン検証 UserInfoリクエスト (アクセストークン) UserInfoレスポンス アクセストークン検証 (スコープ + クレーム) (完了) ユーザー認証・ 同意確認 (スコープ + クレーム) (スタート) UserInfoレスポンス 利用 ユーザーのことが わかる ユーザーのことが もっとわかる • OAuth 2.0: 「アクセストークン」を 用いた「API認可フレームワーク」 Resource Owner User Agent Client Authorization Server Resource Server Authorization Code Grant Flow / Bearer Token の例 認可リクエスト (スコープ) 認可レスポンス (認可コード) APIへのアクセス 権限をもらいたい トークンリクエスト (認可コード) トークンレスポンス (アクセストークン) APIリクエスト (アクセストークン) APIレスポンス アクセストークン検証 (スコープ) (完了) ユーザー認証・ 同意確認 (スコープ) (スタート) アクセス権限を 確認できる
  2. 3 • 既存の情報・機能をどう活かすか によって取るべきアプローチは 異なる • 王道は独立した「共通ID基盤」の 構築 • ポイント

    – 会員基盤の移行やユーザー認証機能 の切り替えなどが可能であること – かつ投資対効果が見込めること – CIAMソリューション、IDaaS、… 会員 基盤 ログイン 既存サービスにOAuth/OIDC機能をどう追加するか アプリ ケーション 既存サービス 会員 基盤 ログイン 新会員 基盤 ログイン 共通ID基盤 OAuth/ OIDC 機能 新規サービス アプリ ケーション サービス 利用 OAuth/ OIDC 連携 ユーザー 認証 ユーザー 認証機能の 切り替え 会員基盤の 移行 OAuth/OIDC連携 会員 基盤 ログイン サービス 利用
  3. アプリ ケーション 4 • 既存サービスにOAuth/OIDC機能を 組み込む • 既存の会員基盤やユーザー認証機能 などをそのまま使う •

    ユースケース例 – 複数サービスのIDをどれかひとつに 寄せたい – 自社の独自SSO/API認可機構を改善 したい – 自社サービスに外部SaaSを連携 させたい OAuth/OIDC化 — もうひとつの王道 会員 基盤 ログイン 新規サービス アプリ ケーション ユーザー 認証 サービス 利用 サービス 利用 既存サービス アプリ ケーション 会員 基盤 ログイン OAuth/ OIDC 機能 既存サービス OAuth/ OIDC 連携
  4. 5 • ユーザーが既存アプリにアクセス • 未ログインの場合、既存アプリが ユーザー認証 • 既存アプリにログイン完了 • ユーザーが、ログイン済み状態で

    既存アプリにアクセス • 既存アプリが、ユーザーの アクセス権限を確認し、 コンテンツを返却 既存アプリケーションの利用シーケンス ユーザー Webブラウザ など 既存アプリ ケーション アプリにアクセス コンテンツ返却 ユーザー認証 ログインセッション 確認 認証情報照合 ログイン完了 アプリにアクセス アクセス権限確認
  5. • ユーザーが既存アプリにアクセス • 未ログインの場合、既存アプリが ユーザー認証 • 既存アプリにログイン完了 • ユーザーが、ログイン済み状態で 既存アプリにアクセス

    • 既存アプリが、ユーザーの アクセス権限を確認し、 コンテンツを返却 外部アプリ ケーション 6 • ユーザーが外部アプリにアクセス • 未ログインの場合、既存アプリが ユーザー認証 • 既存アプリと外部アプリが連携 • ユーザーが、連携済み状態で 外部アプリにアクセス • 外部アプリがAPIにアクセス • 既存アプリが、ユーザーの アクセス権限を確認し、 APIレスポンスを返却 • 外部アプリがコンテンツを返却 そこに別のアプリケーションが加わる ユーザー Webブラウザ など 既存アプリ ケーション アプリにアクセス ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 コンテンツ返却 アプリにアクセス APIリクエスト アクセス権限確認 APIレスポンス
  6. 外部アプリ ケーション 7 • ユーザー認証・アクセス 権限依頼の受信 – どのようなユーザー認証・ アクセス権限が求められて いるか?

    どのアプリに? • 認証結果・アクセス権限の 提供 – どのような形式で返却する? • APIリクエストに関する アクセス権限情報の取得 – どうやって取得する? 既存アプリケーション側の対応 ユーザー Webブラウザ など 既存アプリ ケーション アプリにアクセス ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 アプリにアクセス ユーザー認証・アクセス 権限依頼の受信 認証結果・アクセス権限 の提供 コンテンツ返却 アクセス権限確認 APIリクエスト APIレスポンス アクセス権限 情報の取得
  7. 外部アプリ ケーション 8 • アプリケーションから2つの機能を 分解 – 認可サーバー (and/or OpenIDプロバイダー)

    – リソースサーバー • OAuth/OIDCエンドポイントを 認可サーバーに実装 – 認可リクエスト処理 – トークン発行 – イントロスペクション(オプション) – その他 既存アプリケーションを「OAuth/OIDC化」 ユーザー Webブラウザ など アプリにアクセス ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 アプリにアクセス コンテンツ返却 既存アプリ ケーション リソース サーバー 認可サーバー 認証情報照合 アクセス権限確認 APIリクエスト APIレスポンス 認可リクエスト処理 トークン発行 イントロスペクション アクセス権限確認 APIリクエスト APIレスポンス
  8. リソース サーバー 外部アプリ ケーション 9 • 「認可エンドポイント」 – 認可リクエストの内容を解析 –

    後続のOAuth/OIDC処理に 引き継ぎ 認可リクエスト処理 ユーザー Webブラウザ など 認可サーバー アプリにアクセス ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 アプリにアクセス 認可リクエスト 認可リクエスト 処理 コンテンツ返却 アクセス権限確認 APIリクエスト APIレスポンス トークン発行 イントロスペクション
  9. リソース サーバー 外部アプリ ケーション 10 • 「認可レスポンス生成機能」と 「トークンエンドポイント」 – 認可リクエストと、ユーザーとのや

    り取りに基づき、認可レスポンスを 生成 – トークンリクエストの内容を解析 – 認可リクエストと、ユーザーとの やり取りと、トークンリクエストに 基づき、トークンレスポンスを生成 – その後、発行したトークンの ライフサイクルを管理 トークン発行 ユーザー Webブラウザ など 認可サーバー アプリにアクセス ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 アプリにアクセス 認可リクエスト 認可リクエスト 処理 認可レスポンス トークンリクエスト トークンレスポンス 認可レスポンス 生成 トークン リクエスト処理 アクセス権限確認 コンテンツ返却 APIリクエスト APIレスポンス イントロスペクション
  10. リソース サーバー 外部アプリ ケーション 11 • 「イントロスペクション エンドポイント」 – イントロスペクション

    リクエストの内容を解析 – イントロスペクション リクエストと、トークンの 状態と、トークン発行の コンテクストに基づき、 イントロスペクション レスポンスを生成 イントロスペクション(オプション) ユーザー Webブラウザ など 認可サーバー アプリにアクセス コンテンツ返却 ユーザー認証 ログインセッション 確認 認証情報照合 連携完了 アプリにアクセス 認可リクエスト 認可リクエスト 処理 認可レスポンス トークンリクエスト トークンレスポンス 認可レスポンス 生成 トークン リクエスト処理 アクセス権限確認 APIリクエスト APIレスポンス イントロスペクション リクエスト イントロスペクション リクエスト処理 イントロスペクション レスポンス
  11. 12 • くわしくは前回の勉強会をどうぞ – https://www.authlete.com/ja/resources/videos/20240618/ • ユースケース例 – 複数サービスのIDをどれかひとつに 寄せたい

    • 親サービスと、子となる複数 サービスとのすり合わせ – 自社の独自SSO/API認可機構を改善 したい • 既存のSSO/API認可ポリシーと OAuth/OIDC仕様とのすり合わせ – 自社サービスに外部SaaSを連携 させたい • SaaSが定めるプロファイルに準拠 プロファイリング(OAuth/OIDCの詳細仕様化) Resource Owner User Agent Client Authorization Server Resource Server APIリクエスト APIレスポンス 認可リクエスト 処理 認可レスポンス 生成 トークン リクエスト処理 イントロスペクション リクエスト イントロスペクション レスポンス アクセス権限確認 認可リクエスト 認可レスポンス トークンリクエスト トークンレスポンス イントロスペクション リクエスト処理 ログインセッション 確認 認証情報照合 アプリにアクセス コンテンツ返却 ユーザー認証 連携完了 アプリにアクセス 例: クライアント種別、 要求可能なスコープや クレーム、PKCE、PAR、... 例: クライアント 認証方式、DPoP、 mTLS、… 例: トークンの有効期限、リフレッシュ ポリシー、クレーム値(IDトークン / アサーション型アクセストークン)、… 例: クライアント情報、 ユーザー情報、認可 詳細、…
  12. 13 • 追加する機能 – OAuth/OIDC共通 • 認可リクエスト処理 • トークンリクエスト処理 –

    OAuth • イントロスペクションリクエスト処理 • リボケーション、PAR、RAR、DPoP、 mTLS、… – OIDC • IDトークン発行処理 • ディスカバリー、UserInfo、… • 必要な実装 – OAuth/OIDCプロトコル処理 – トークンライフサイクル管理 – クライアント/サーバー設定管理 まとめ Resource Owner User Agent Client Authorization Server Resource Server APIリクエスト APIレスポンス 認可リクエスト 処理 認可レスポンス 生成 トークン リクエスト処理 イントロスペクション リクエスト イントロスペクション レスポンス アクセス権限確認 認可リクエスト 認可レスポンス トークンリクエスト トークンレスポンス イントロスペクション リクエスト処理 ログインセッション 確認 認証情報照合 アプリにアクセス コンテンツ返却 ユーザー認証 連携完了 アプリにアクセス …大変なのでは!?
  13. 14 • OAuth/OIDCリクエスト処理 を代行するAPI • トークン管理のための永続的 ストレージ • 鍵管理やクライアント設定の 一元化

    • ユーザー向けセルフサービス や運用者向け機能を実装する ための管理API Authlete: OAuth/OIDC化に必要な実装を提供 Resource Owner User Agent Client Authorization Server Resource Server APIリクエスト APIレスポンス イントロスペクション リクエスト イントロスペクション レスポンス アクセス権限確認 認可リクエスト 認可レスポンス トークンリクエスト トークンレスポンス ログインセッション 確認 認証情報照合 アプリにアクセス コンテンツ返却 ユーザー認証 連携完了 アプリにアクセス Authlete 認可リクエスト処理 認可レスポンス生成 トークンリクエスト 処理 イントロスペクション リクエスト処理