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

Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ

Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ

More Decks by アクイアジャパン Acquia Japan

Other Decks in Programming

Transcript

  1. Drupalと PHP製 オープンソースCMS! 作者 Dries Buytaert 言語 PHP ライセンス GPL

    v2以降 初回リリース 2001年1月15日 公式サイト drupal.org ソースコード git.drupalcode.org/project/drupal 最新バージョン 10.2.x (2024年6月時点) – デジタル体験を提供する、オープンソース CMS(コンテンツ管理システム)です。 – LAMPスタックで動作します。 – NASA、オーストラリア政府、NASDAQなど 金融機関から、ネスレ、ファイザー、IBM など様々な組織がDrupalを採用していま す。
  2. Drupalに向いているサイト 一例 コンテンツ量 が多い 製品情報サイト グローバル (多言語)対応 グローバル企業サイト 高い安全性 を維持

    ミッションクリティカルなサイト マルチチャネル へ 配信 ヘッドレス CMS マーケティング ツールと 連携 ブランドサイト ユーザー会員 対応 ポータルサイト
  3. Drupalで構築されたポータルサイト 事例 医療従事者向けウェブサイト 医療従事者用認証基盤と連携し、 一般公開できない医療関連情報を 限定された訪問者向けに掲載。医師 興味・関心を 分析し、売上拡大に貢献させる 製造業顧客向け資料ダウンロードサイト 既存

    顧客向けに、購入済み製品に関連する 詳細な仕様やCADでデータなどを限定公開し、効 率的なアフターサポートを提供 自社社員・関連会社社員向け ナレッジポータル 自社社員向け 情報をナレッジポータルにて一元管 理。関連会社・パートナー企業等に 権限管理され た一部 情報を限定公開 製造業代理店向け会員サイト 自社製品を販売する代理店に限定された会員サイ ト。製品販売数 増加と代理店 囲い込みを目的 に、自社製品 優位性をアピールするプラットフォー ムを構築
  4. Drupal標準 認証機能 – クッキー認証 – モノリシックなDrupalアプリケーショ ンでユーザー名 & パスワードでロ グイン

    – ベーシック認証 – 保護されたリソースにWeb APIでア クセスする場合 任意 ソーシャルロ グインに対応したい 2要素認証でセキュ リティを高めたい パスワードレス認証 やパスキー認証など 事業部ごとにユー ザー管理が乱立し ている Web API 認証 いい感じにしたい
  5. DrupalでAuth0 by Oktaが 求められるケース – ID統合 – 複数アプリケーション 認証認可 管理、仕組みを一元化する

    – ログイン体験 向上 – ソーシャルログイン、パスキー認証など – 厳格なセキュリティ要件に対応 – 2要素認証、リスクベース アクセス制御、異常なアクティビティ 検出など
  6. IDプロバイダとして Auth0を使用するに – 外部 OpenID Connectログインプロバイ ダーを使用して、サイト上 ユーザーを認証 およびログインできます。 –

    ユーザーがWebサイトで初めてログインプロ バイダーを使用してサインインすると、新しい Drupalユーザーが作成されます。 ※ 名前が長い で以降 openid_connect と呼びます。 OpenID Connect / OAuth clientモジュールが有用 https://www.drupal.org/project/openid_connect
  7. – Generic OAuth 2.0 – Facebook – Github – Google

    – LinkedIn – Okta openid_connectモジュールで サポートされている IDプロバイダ
  8. – Generic OAuth 2.0 ← 今回 これで実現できます – Facebook –

    Github – Google – LinkedIn – Okta openid_connectモジュールで サポートされている IDプロバイダ 補足) 今日現在、Auth0に特化したプロバイダ 用意されていないですが、 IDプロバイダに Auth0を追加するという機能リクエスト issue 作成されています。 https://www.drupal.org/project/openid_connect/issues/3327237
  9. 設定方法 Auth0側 - Drupalアプリをリライングパーティとして登録 1. アプリケーションを1つ作成する こ 際、[Regular Web Applications]

    を選択する 図1 2. アプリケーション 設定画面で、次 項目を設定して保存する 図2 ・Allowed Callback URLs: https://your-drupal-site/openid-connect/generic ・Allowed Logout URLs: https://your-drupal-site ・Allowed Web Origins: https://your-drupal-site ・Allowed Origins: https://your-drupal-site 3. アプリケーション Domain, Client ID, Client Secretを コピーしておく 図3 1 2 3
  10. Drupal側 - Auth0をIDプロバイダ として登録 設定方法 1. OpenID Connect / OAuth

    clientモ ジュール インストールと有効化 2. モジュール 設定ページ (URL: /admin/config/services/openid-connect)で、 右図 ように設定 Auth0から提供 される情報 2
  11. バックエンド APIサービスとして Drupal Drupal CMSとして有名で、企業サイトで 利用事例が圧倒的に多いですが、Drupal バックエンドAPI サービスとして利用するに十分なプラットフォームです。 1. コンテンツモデリング:

    Drupalで 柔軟なコンテンツ構造を構築できるアーキテクチャとUIを備えて います。 2. モダンな技術スタック: Twig/DI/Routing等 Symfonyコンポーネント、Twig、Composer、PHPUnit がDrupalに組み込まれていることで、Webアプリケーションフレームワークさながら 実装が行えま す。 3. 豊富な拡張機能: 巨大なOSSコミュニティから提供される数万個も コントリビュートモジュール(拡 張機能)を活用することで、カスタムコードを最小限に抑えながら機能拡張できます。 4. Web APIへ 対応: 近年で API-Firstを掲げてより良い構造化データエンジンおよびWebサービス プラットフォームに対応させる取り組みが始まっています。
  12. Drupalアプリケーションを リソースサーバーとして扱う OIDC: エンドユーザー OAuth: リソースオーナー OIDC: リライングパーティ OAuth: クライアント

    OIDC: IDプロバイダ OAuth: 認可サーバー OAuth: リソースサーバー 出典:Authorization Code Flow https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow
  13. – メニュー Applications > APIs でリソースサー バーを定義する。図1 – 認可コードを取得するときに「 audience」パラ

    メータでリソースサーバー オーディエンス 値を指定することで、発行されたアクセストーク ンで利用可能なリソースサーバーを特定する。 – アクセストークンをデコードすると、ペイロードに 「aud」クレームとしてアクセストークンで有効な リソースサーバー一覧が表示される。 図2 Auth0でリソースサーバーを定義する 1 2
  14. Drupalでアクセストークンを検証するに Drupal Authentication APIを使用して、独自 認証プロバイダサービスを用意する – Authentication APIと – Drupalユーザー

    認証認可を安全に処理するため API – 認証プロバイダサービスと – 各モジュールが提供する認証プロバイダサービスを任意 ルーティングで利用可能 – Drupalコアで クッキー認証、ベーシック認証 2つ 認証プロバイダサービスが提供されてい る – 認証プロバイダサービス 作成方法 – Authentication APIが用意するAuthenticationProviderInterfaceインターフェイスを実装したク ラスを用意することで、独自 認証プロバイダサービスを提供可能 – これを実現するコントリビュートモジュール ? – 残念ながら見つけられなかった で、今回 カスタムモジュールでデモ https://www.drupal.org/docs/8/api/authentication-api/overview https://medium.com/drupaljournal/authentication-authentication-providers-in-drupal- 66138c66bc0b
  15. デモ ② 1. 認可コードフローでユーザーが Regular Web Appにログインして、 IDトークンと共 にアクセストークンを取得する 2.

    取得したアクセストークンで Drupal app A Web APIエンドポイントに要認証 コン テンツをリクエストする OIDC: エンドユーザー OAuth: リソースオーナー OIDC: リライングパーティ OAuth: クライアント OIDC: IDプロバイダ OAuth: 認可サーバー OAuth: リソースサーバー Drupalアプリケーションをリソースサーバーとして扱う
  16. まとめ – DrupalとAuth0 by Oktaを組み合わせることで、ID統合、ログイン体験 向上、セキュリ ティ強化などが見込めます。 – OpenID Connect

    仕様で、モノリシックなDrupalアプリケーションにAuth0 by Oktaを IDプロバイダとして利用可能です。 – ヘッドレスCMSなど、DrupalアプリケーションをバックエンドAPIサービスとして利用する 際、Auth0 OAuth 2.0 認可サーバーとしても機能します。 – Auth0 わかりやすいUI、API&SDK、豊富なサンプルコードが提供されており、開発者 フレンドリーなIDaaSです!