次の方法で共有


ローカル テスト用にシミュレーター認証を構成する

シミュレーター認証プロバイダーを使用すると、ID プロバイダーを構成せずに、ロールベースのアクセス許可をローカルでテストできます。 運用環境にデプロイする前に、開発中にアクセス許可ルールが正しく動作することを確認するために使用します。

ローカル認証プロバイダーを選択する

開発中は、運用 ID プロバイダーを構成せずに認証と承認をテストできます。

プロバイダー 最適な用途 注記
シミュレーター クイック許可テスト 開発専用。 すべての要求を認証済みとして扱います。 初期設定では Authenticated ロールです。X-MS-API-ROLE で上書きすることができます。
AppService 要求駆動型テスト カスタム要求を使用して X-MS-CLIENT-PRINCIPAL を送信して、EasyAuth をローカルでシミュレートします。 詳細については、「 App Service 認証の構成」を参照してください。

認証フロー

シミュレーター プロバイダーでは、すべての要求が認証済みとして扱われます。これにより、承認規則のテストに集中できます。

要求が認証済みとして自動的に処理される方法を示すシミュレーター認証フローの図。

Phase 何が起こるか
要求が到着しました 開発者が DAB に HTTP 要求を送信する
ロールの割り当て DAB は、Authenticated (既定) または X-MS-API-ROLE ヘッダーからのロールを割り当てます。
アクセス許可の確認 DAB は、そのロールに対するエンティティの権限に基づいて要求を評価します
クエリの実行 許可されている場合、DAB はデータベースに対してクエリを実行し、結果を返します

Important

シミュレーター プロバイダーは 開発専用です。 運用環境では使用しないでください。すべての実際の認証がバイパスされます。

[前提条件]

  • Data API Builder CLI がインストールされている (インストール ガイド)
  • 少なくとも 1 つのエンティティを持つ既存のdab-config.json

クイック リファレンス

Setting 価値
プロバイダー Simulator
ホスト モード development (必須)
既定のロール Authenticated (自動的に挿入)
役割上書きヘッダー X-MS-API-ROLE
トークンが必要 いいえ
クレームサポート 制限付き (システム ロール Anonymous/Authenticated のみ、任意の要求なし)

手順 1: シミュレーター プロバイダーを構成する

認証プロバイダーをシミュレーターに設定し、開発モードが有効になっていることを確認します。

CLI

# Enable development mode
dab configure \
  --runtime.host.mode development

# Set the Simulator provider
dab configure \
  --runtime.host.authentication.provider Simulator

結果の構成

{
  "runtime": {
    "host": {
      "mode": "development",
      "authentication": {
        "provider": "Simulator"
      }
    }
  }
}

シミュレーター プロバイダーは、 modedevelopment に設定されている場合にのみ機能します。 実稼働モードでは、DAB はシミュレーター プロバイダーを拒否し、起動に失敗します。

手順 2: エンティティのアクセス許可を構成する

テストするロールのアクセス許可を定義します。 システム ロール (AnonymousAuthenticated) とカスタム ロールをテストできます。

例: 複数の役割

# Allow anonymous read access
dab update Book \
  --permissions "Anonymous:read"

# Allow authenticated users full read access
dab update Book \
  --permissions "Authenticated:read"

# Allow authors to create and update
dab update Book \
  --permissions "author:create,read,update"

# Allow admins full access
dab update Book \
  --permissions "admin:*"

結果の構成

{
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Anonymous",
          "actions": ["read"]
        },
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "author",
          "actions": ["create", "read", "update"]
        },
        {
          "role": "admin",
          "actions": ["*"]
        }
      ]
    }
  }
}

手順 3: さまざまなロールをテストする

データ API ビルダーを起動し、各ロールをテストする要求を送信します。

dab start

認証済みとしてテストする (既定)

特別なヘッダーがない場合、要求は Authenticated ロールとして評価されます。

curl -X GET "http://localhost:5000/api/Book"

匿名としてテストする

X-MS-API-ROLE ヘッダーを使用して、Anonymousとしてテストします。

curl -X GET "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: Anonymous"

カスタム ロールとしてテストする

X-MS-API-ROLE ヘッダーを使用して、カスタム ロールをテストします。

curl -X GET "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: author"

シミュレーターでは、DAB が X-MS-API-ROLE ヘッダー値に基づいてアクセス許可を評価するため、カスタム ロール テストが機能します。 システム ロール (AnonymousAuthenticated) は常に使用できます。 カスタム ロール要求から 403 が返された場合は、ロール名がエンティティのアクセス許可と正確に一致するかどうかを確認します。

拒否する必要があるアクションをテストする

ロールにアクセス許可がないアクションを試してください。

# This should fail—Anonymous can only read
curl -X POST "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: Anonymous" \
  -H "Content-Type: application/json" \
  -d '{"title": "New Book", "author": "Test"}'

予想される応答: 403 Forbidden

テストのシナリオ

シミュレーターを使用して、次の一般的なシナリオをテストします。

Scenario テスト方法
匿名アクセス セット X-MS-API-ROLE: Anonymous
認証済みアクセス ヘッダーを省略する (既定) または X-MS-API-ROLE: Authenticated を設定する
カスタム ロール アクセス セット X-MS-API-ROLE: <role-name>
拒否されたアクション ロールにアクセス許可がないアクションを要求する
フィールドの制限 フィールド レベルのアクセス許可を構成し、応答フィールドを確認する
ロールが見つかりません X-MS-API-ROLE: nonexistentを設定してエラー処理をテストする

制限事項

シミュレーター プロバイダーには、次の制限があります。

制限事項 対処法
カスタム要求なし X-MS-CLIENT-PRINCIPAL ヘッダーで AppService プロバイダーを使用する
要求を含むデータベース ポリシーがない AppService プロバイダーを使用してポリシーをテストする
トークン検証なし 運用のために Entra またはカスタム プロバイダーに切り替える
開発モードのみ 運用環境で実際のプロバイダーを使用する

ヒント

要求 ( @claims.userId など) を使用するデータベース ポリシーをテストする必要がある場合は、代わりに AppService プロバイダー を使用します。 X-MS-CLIENT-PRINCIPAL ヘッダーを使用してカスタム要求を提供できます。

運用環境への移行

デプロイする準備ができたら、シミュレーター プロバイダーを運用プロバイダーに置き換えます。

  1. modedevelopmentからproductionに変更する
  2. providerSimulatorから選択したプロバイダー (EntraID/AzureADAppService、またはCustom) に変更する
  3. 必要な JWT 設定 (対象ユーザー、発行者) を構成する
{
  "runtime": {
    "host": {
      "mode": "production",
      "authentication": {
        "provider": "EntraID",
        "jwt": {
          "audience": "api://<your-app-id>",
          "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
        }
      }
    }
  }
}

完全な構成例

{
  "$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=localhost;Database=Library;Trusted_Connection=true;TrustServerCertificate=true;"
  },
  "runtime": {
    "host": {
      "mode": "development",
      "authentication": {
        "provider": "Simulator"
      }
    }
  },
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Anonymous",
          "actions": ["read"]
        },
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "author",
          "actions": ["create", "read", "update"]
        },
        {
          "role": "admin",
          "actions": ["*"]
        }
      ]
    }
  }
}