LoginSignup
8
8

More than 1 year has passed since last update.

Azure Static Web Appsを試してみた4【Azure AD連携】

Last updated at Posted at 2021-07-01

はじめに

以前の記事Azure Static Web Appsを試してみた3【API(Azure Functions)連携】でAzure Static Web Appsと、Azure Functionsとの連携について書きました。
今回は、セキュリティを考慮し、認証(Azure Active Directory連携)を取り入れてみます。

Azure Active Directory

例によって、アプリケーションの登録を行います。
image.png

  • リダイレクトURI
    • デフォルトでは「https://サーバー名/.auth/login/aad/callback」となるようなので、「/.auth/login/aad/callback」をつけておきます。

ディレクトリ(テナント)IDと登録後に払い出される「アプリケーション(クライアント)ID」をローカルに保存しておきます。
image.png

「証明書またはシークレットの追加」をクリックし、クライアントシークレットを作成後、値をローカルに保存しておきます。
image.png

また、メニューから「認証」クリックし、IDトークン(暗黙的およびハイブリットフローに使用)をチェック後、保存します。
image.png

Static Web Apps

メニューで構成を選択し「アプリケーション設定」に先程、ローカルに保存しておいた「アプリケーションID」と「クライアントシークレット」をそれぞれ登録し、キーをローカルに保存しておきます。
image.png

staticwebapp.config.json

app_locationで指定したフォルダの直下に「staticwebapp.config.json」を作成します。

認証に関わるAADの設定

入力する情報は以下の通りです。

認証に関わるルーティングの設定

  • ログイン
    • /.auth/login/aad
  • ログアウト
    • /.auth/logout
  • ログイン後のリダイレクトURL
    • /.auth/login/aad/callback
  • 401発生時
    • ログインへリダイレクト
  • すべてのエンドポイント
    • allowedRolesをauthenticatedにし、認証済みであることを前提とする
{
  "$schema": "https://json.schemastore.org/staticwebapp.config.json" ,
  "auth": {
    "identityProviders": {
      "azureActiveDirectory": {
        "registration": {
          "openIdIssuer": "https://login.microsoftonline.com/{保存しておいたテナントID}",
          "clientIdSettingName": "AAD_ClientID",
          "clientSecretSettingName": "AAD_Client_Secret"
        }
      }
    }
  },
  "routes": [
    {
      "route": "/login",
      "redirect": "/.auth/login/aad"
    },
    {
      "route": "/logout",
      "redirect": "/.auth/logout"
    },
    {
      "route": "/.auth/login/aad/callback",
      "redirect": "/"
    },
    {
      "route": "/*",
      "allowedRoles": ["authenticated"]
    }
  ],
  "responseOverrides": {
    "401": {
      "redirect": "/login",
      "statusCode": 302
    }
  }
}

動作確認

無事、ログインできていない場合は、ログインページが表示されました。
image.png

ログイン後はアプリケーションのページが表示されます。
(当然API側も認証されていない場合は、loginにリダイレクトされます)

TIPS

当然ローカル環境でも認証について確認したくなるのですが、以下の手順で可能です。

static-web-apps-cli

Static Web Apps用のCLIをインストールし、CLIを実行することで疑似的に認証が出来ます。

> npm install -g @azure/static-web-apps-cli

以下のコマンドを実行する前にAngularプロジェクトを起動(ng serve)しておく必要があります。

> swa start http://localhost:4200 --swa-config-location ./angular-swa 

(./angular-swaは「staticwebapp.config.json」の配置場所です。)

実行後は「http://localhost:4280 」にアクセスすることでAngularアプリにアクセスでき、疑似的にログイン後のユーザー情報の設定画面が表示されます。
image.png

まとめ

Azure Active Directoryとの連携を試しましたが、OpenID Connectでの連携もサポートされいるようなので、次回はAzure Active Directory B2Cも試してみようと思います。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8