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

第111回 雲勉【オンライン】Azure AD と Static Web Apps でWebサ...

第111回 雲勉【オンライン】Azure AD と Static Web Apps でWebサイトに認証機能を導入する

下記、勉強会での資料です。
https://youtu.be/AEIqiNPe8i8

iret.kumoben

August 17, 2023
Tweet

More Decks by iret.kumoben

Other Decks in Technology

Transcript

  1. 第111回 雲勉【オンライン】 Azure AD と Static Web Apps で Web

    サイトに認証機能を導入する 平田 健士郎
  2. アジェンダ • ⾃⼰紹介 • 注意点 • 話すこと/話さないこと • Azure AD

    と Static Web Apps で Web サイトに認証を導⼊するケース • デモ • デモ環境の作成⽅法ご説明 • まとめ
  3. ⾃⼰紹介 平⽥ 健⼠郎 (ひらた けんじろう) ▪ クラウドインテグレーション事業部 構築第⼋セクション ▪ 業務内容はクラウドインフラの設計/構築/運⽤

    ▪ アイレット⼊社約1年半 ▪ 前職で MSP を 2 年を経験してそこで初めてクラウドに触れる ▪ 業務では AWS 中⼼だが Azure 案件の経験もあり ←奥さんに描いてもらった似顔絵
  4. 注意点① Azure AD (Azure Active Directory) は Microsoft Entra ID

    に 名称が変更される予定ですが、この登壇時点ではまだ名称変更されて いないため、この登壇では「Azure AD」と名称を統⼀します。 https://www.microsoft.com/ja-jp/security/business/identity-access/azure-active-directory
  5. 話すこと •Static Web Apps と Azure AD の簡単な説明 •Static Web

    Apps での静的 Web サイトの作成⽅法 •Azure AD の認証を Static Web Apps に組み込む⽅法 •特定の Azure AD テナントのみ認証を許可する⽅法 話さないこと •Azure の基礎的な操作⽅法 •OpenID Connect 等の認証プロトコルの深掘りした話
  6. Static Web Apps とは 静的 Web サイトのホスティングサービス • 手軽に 静的

    Web サイトを作成できる (無料プランもある) • サーバーレス • GitHub Actions 等の CI/CD ワークフロー
  7. Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •

    Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成
  8. Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •

    Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成 自動デプロイされてコンテンツが表示できるようになる • Static Web Apps を作成したら GitHub リポジトリからソースを取得してデプロイ • コンテンツ表示を確認
  9. Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •

    Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成 動画で様子をお見せします! 自動デプロイされてコンテンツが表示できるようになる • Static Web Apps を作成したら GitHub リポジトリからソースを取得してデプロイ • コンテンツ表示を確認
  10. GitHub Actions による 自動デプロイ Static Web Apps を作成して ソースに GitHub

    リポジトリを指定 することで GitHub Actions という 機能を使って 自動デプロイ を実現 できる
  11. GitHub Actions による 自動デプロイ 同時に GitHub のソースコードに GitHub Actions 設定用の

    yuml ファイルが作成される 中身はこんな感じ → (今回はこの部分はメインではない ため詳細は割愛します)
  12. GitHub Actions による 自動デプロイ GitHub のソースコードに GitHub Actions 設定用の yuml

    ファイルが作成されたので、 ローカルをリモートに合わせるため git pull を行います。
  13. それぞれ専用のログイン URL が用意されています 認証プロバイダー ログイン URL Azure AD https://**********.azurestaticapps.net/.auth/login/aad GitHub

    https://**********.azurestaticapps.net/.auth/login/github Twitter https://**********.azurestaticapps.net/.auth/login/twitter 動画で様子をお見せします! Static Web Apps で既存の認証を使う機 能
  14. Azure AD でアプリの登録 (新規登録) 「アプリの登録」 Azure AD と他のリソースを連携するための設定箇所 ここで特定の Azure

    AD テナントに 今回作成した Static Web Apps を登録することで 特定の Azure AD テナントのみ認証を許可する設定をします。
  15. Azure AD でアプリの登録 (新規登録) 指定した Azure AD テナントで Static Web

    Apps が認証できるように登録する 動画で様子をお見せします!
  16. ・リダイレクト URI ・ログアウト URL ・承認エンドポイントによって発行してほしいトークン->ID トークン これらは OpenID Connect という

    認証プロトコルで使われる要素です Static Web Apps で特定の Azure AD テナントでの認証を許可 するには「カスタム認証」という設定が必要なのですが、 このカスタム認証で OpenID Connect という認証プロトコルに 関する設定箇所があります。
  17. ・ログアウト URL https://learn.microsoft.com/ja-jp/azure/active-directory/develop/scenario-web-app-sign-user- sign-in?tabs=aspnetcore#sign-out サインアウトするには、Web アプリによってユーザーが Microsoft ID プラットフォーム logout

    エンドポイントにリダイレクトされる必要も あります。 Web アプリによってユーザーが logout エンドポイントにリダイレクト されると、このエンドポイントでは、ユーザーのセッションがブラウザ ーから消去されます。
  18. ・リダイレクト URI ・ログアウト URL Static Web Apps では上記がデフォルトで用意されています ※ Azure

    AD の場合 リダイレクト URI https://***********.azurestaticapps.net/.auth/login/aad/callback ログアウト URL https://***********.azurestaticapps.net/.auth/logout/aad/callback
  19. Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)

    が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。 ① ②
  20. Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)

    が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。
  21. Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)

    が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。
  22. Static Web Apps で変数の保存 Static Web Apps でクライアントID と シークレットの値を変数として保存をしま

    す 値は暗号化して保存されます https://learn.microsoft.com/ja-jp/azure/static-web-apps/application-settings
  23. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定
  24. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定
  25. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定 認証の設定 openIdIssuer : OpenID Connect 発行者 URI
  26. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定 認証の設定 clientIdSettingName : 認証情報 clientSecretSettingName : 認証情報
  27. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } ルーティングの設定 /* に対して適用する authenticated (認証済み) の場合のみ allowedRoles (ルートへのアク セスを許可する
  28. Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":

    { "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } サーバーからエラー コードが返される場合のカスタム応答を設定 401:Unauthorized コードの時に 302 : Temporary Redirect コードにオーバーライドして "/.auth/login/aad" にリダイレクトする
  29. Static Web Apps のアプリ構成ファイルを作成 作成した構成ファイルを GitHub に push したら GitHub

    Actions により Static Web Apps にデプロイされることにより 意図した設定 (特定の Azure AD のみ認証可能な状態) が反映されます 動画で様子をお見せします!(これが最後)
  30. まとめ • AzureAD でアプリケーションへの認証と認可を提供できます • Static Web Apps は既存の認証を利用する機能がデフォルトで が実装されています

    • 特定の AzureAD テナントで認証を許可する設定が可能です • これらによって簡単に社内向け Web サイトを作成して認証を組 み込むことが可能です