次の方法で共有


認証ガイド

このガイドでは、ローカル開発と CI/CD パイプラインの認証の構成について説明します。

ローカル開発の認証 (パスワード)

パスワード認証は、ローカル コンピューターで作業を開始する最も簡単な方法です。

  1. .env ファイルに次の変数を設定します。

    MS_AUTH_EMAIL=testuser@contoso.com
    MS_AUTH_CREDENTIAL_TYPE=password
    MS_USER_PASSWORD=<password>
    
  2. 認証スクリプトを実行します。 ブラウザー ウィンドウが開きます。

    npm run auth:headful
    
  3. サインイン フローを完了します。 このプロセスでは、ストレージの状態が自動的に保存されます。

  4. モデル駆動型アプリをテストする場合は、CRM ドメインに対して認証します。

    npm run auth:mda:headful
    

証明書を使用して認証する (local-file)

証明書認証はパスワードよりも安全であり、ローカル開発と CI/CD の両方に適しています。

  1. Microsoft Entra ID管理者から、テスト ユーザーの .pfx 証明書ファイルを取得します。

  2. cert/ ディレクトリのリポジトリ ルートに証明書ファイルを配置します。

  3. .env ファイルに次の変数を設定します。

    MS_AUTH_EMAIL=testuser@contoso.com
    MS_AUTH_CREDENTIAL_TYPE=certificate
    MS_AUTH_CREDENTIAL_PROVIDER=local-file
    MS_AUTH_LOCAL_FILE_PATH=../../cert/<cert-file>.pfx
    MS_AUTH_CERTIFICATE_PASSWORD=<optional-password>
    
  4. 認証スクリプトを実行します。

    npm run auth:headful       # https://make.powerapps.com
    npm run auth:mda:headful   # Model-driven app (if needed)
    

Azure Key Vaultで認証する

Azure Key Vaultを使用して、共有環境または運用環境で証明書を一元的に管理します。

  1. 証明書をAzure Key Vaultにアップロードします。

  2. ボールトでパイプライン サービス プリンシパルにKey Vault Certificate Userのロールを付与してください。

  3. .envまたはパイプライン シークレットに次の変数を設定します。

    MS_AUTH_EMAIL=testuser@contoso.com
    MS_AUTH_CREDENTIAL_TYPE=certificate
    MS_AUTH_CREDENTIAL_PROVIDER=azure-keyvault
    AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/
    AZURE_CERTIFICATE_NAME=<certificate-name>
    AZURE_TENANT_ID=<tenant-id>
    

CI/CD 認証を構成する

CI/CD では、認証はテスト スイートの開始前に globalSetup で実行されます。 スクリプトは、構成された資格情報プロバイダーを使用して、新しいストレージ状態をヘッドレスで取得します。

GitHub Actionsの例

このワークフロー ステップは、Azure Key Vaultに格納されている証明書を使用してPower AppsドメインとDynamics 365 ドメインの両方に対して認証を行い、Playwright テスト スイートを実行します。

- name: Authenticate to Power Platform
  env:
    MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
    MS_AUTH_CREDENTIAL_TYPE: certificate
    MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
    AZURE_KEYVAULT_URL: ${{ secrets.AZURE_KEYVAULT_URL }}
    AZURE_CERTIFICATE_NAME: ${{ secrets.AZURE_CERTIFICATE_NAME }}
    AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
    MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
  run: |
    cd packages/e2e-tests
    npm run auth
    npm run auth:mda

- name: Run tests
  run: |
    cd packages/e2e-tests
    npx playwright test

Azure Pipelinesの例

このパイプライン タスクは、Azure Key Vaultの証明書を使用してPower AppsドメインとDynamics 365 ドメインの両方に対して認証を行い、Playwright テスト スイートを実行します。

- task: Bash@3
  displayName: Authenticate to Power Platform
  env:
    MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
    MS_AUTH_CREDENTIAL_TYPE: certificate
    MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
    AZURE_KEYVAULT_URL: $(AZURE_KEYVAULT_URL)
    AZURE_CERTIFICATE_NAME: $(AZURE_CERTIFICATE_NAME)
    AZURE_TENANT_ID: $(AZURE_TENANT_ID)
    MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
  script: |
    cd packages/e2e-tests
    npm run auth
    npm run auth:mda

- task: Bash@3
  displayName: Run Playwright tests
  script: |
    cd packages/e2e-tests
    npx playwright test

認証を確認する

認証後、ストレージ状態ファイルが存在することを確認します。

ls packages/e2e-tests/.playwright-ms-auth/
# state-testuser@contoso.com.json
# state-mda-testuser@contoso.com.json

トークンの有効性を確認します。

import { ConfigHelper } from 'power-platform-playwright-toolkit';

const check = ConfigHelper.checkStorageStateExpiration(
  '.playwright-ms-auth/state-testuser@contoso.com.json'
);

if (check.expired) {
  console.log('Token expired, please re-authenticate');
} else {
  const expiryDate = new Date(check.expiresOn! * 1000);
  console.log(`Token valid until: ${expiryDate.toLocaleString()}`);
}

認証エラーをトラブルシューティングする

次の表に、一般的な認証の問題とその解決方法を示します。

症状: 想定される原因 Resolution
Authentication tokens have expired ストレージ状態ファイルの有効期限が切れている 再実行 npm run auth:headful
Storage state file does not exist 認証が実行されませんでした npm run auth:headful を実行します。
Certificate file not found MS_AUTH_LOCAL_FILE_PATH のパスが間違っています packages/e2e-tests/ に対してパスが相対的かどうかを確認する
ERR_ABORTED モデル駆動型アプリの認証中 Power Apps 状態の有効期限が切れています npm run auth:headfulnpm run auth:mda:headfulの前に実行する
ブラウザーが予期せず閉じる 以前のブラウザー プロセスがまだ実行されている 数秒待ってから再試行してください

次のステップ

こちらも参照ください