シミュレーター認証プロバイダーを使用すると、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"
}
}
}
}
注
シミュレーター プロバイダーは、 mode が development に設定されている場合にのみ機能します。 実稼働モードでは、DAB はシミュレーター プロバイダーを拒否し、起動に失敗します。
手順 2: エンティティのアクセス許可を構成する
テストするロールのアクセス許可を定義します。 システム ロール (Anonymous、 Authenticated) とカスタム ロールをテストできます。
例: 複数の役割
# 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 ヘッダー値に基づいてアクセス許可を評価するため、カスタム ロール テストが機能します。 システム ロール (Anonymous、 Authenticated) は常に使用できます。 カスタム ロール要求から 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 ヘッダーを使用してカスタム要求を提供できます。
運用環境への移行
デプロイする準備ができたら、シミュレーター プロバイダーを運用プロバイダーに置き換えます。
-
modeをdevelopmentからproductionに変更する -
providerをSimulatorから選択したプロバイダー (EntraID/AzureAD、AppService、またはCustom) に変更する - 必要な 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": ["*"]
}
]
}
}
}