データ API ビルダーを使用してソリューションをローカルで開発する場合、またはオンプレミスで Data API Builder を実行する場合は、特定のロールまたは要求で要求をシミュレートして、構成された認証と承認のオプションをテストする必要があります。
認証プロバイダー (Microsoft Entra ID など) を構成せずに認証済み要求をシミュレートするには、 Simulator 認証プロバイダーを利用できます。
1. Simulator プロバイダーを使用する
Simulator は構成可能な認証プロバイダーであり、すべての要求を認証済みとして扱うようにデータ API ビルダー エンジンに指示します。
- 少なくとも、すべての要求はシステム ロール
Authenticatedのコンテキストで評価されます。 - 必要に応じて、要求は、
X-MS-API-ROLEHttp ヘッダーに示されている任意のロールのコンテキストで評価されます。
注
目的のロールが優先されますが、データベース ポリシーを定義する承認アクセス許可は機能しません。これは、 Simulator プロバイダーで認証されたユーザーに対してカスタム要求を設定できないためです。
ランタイム構成認証プロバイダーを更新する
構成ファイルで、 Simulator 認証プロバイダーと development モードを使用していることを確認します。 このサンプルの host 構成セクションを参照してください。
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
要求のロール コンテキストを指定する
データ API ビルダーの認証プロバイダーとして Simulator を使用する場合、ロール コンテキストをシステム ロール Authenticatedに設定するためにカスタム ヘッダーは必要ありません。
curl --request GET \
--url http://localhost:5000/api/books \
システム ロール Anonymousなど、ロール コンテキストを他のロールに設定するには、 X-MS-API-ROLE ヘッダーを目的のロールに含める必要があります。
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
2. AppService プロバイダーを使用する
AppService認証プロバイダーは、Azure Container Apps 環境内で実行されている場合にのみ存在する一連の HTTP ヘッダーを検索するように Data API ビルダーに指示します。 クライアントは、ロール メンバーシップやカスタム要求など、認証されたユーザーをシミュレートするためにローカルで実行するときに、これらの HTTP ヘッダーを設定します。
"host": {
"mode": "development",
"authentication": {
"provider": "AppService"
}
}
生成された X-MS-CLIENT-PRINCIPAL ヘッダーを提供する要求を送信する
データ API ビルダーがローカルで実行され、 AppService 認証プロバイダーを使用するように構成されたら、次のテンプレートを使用してクライアント プリンシパル オブジェクトを手動で生成できます。
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
App Service には、次のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| アイデンティティプロバイダ | 任意の文字列値。 |
| ユーザーID | ユーザーの一意識別子。 |
| user詳細 | ユーザーのユーザー名またはメール アドレス。 |
| ユーザー役割 | ユーザーの割り当てられたロールの配列。 |
X-MS-CLIENT-PRINCIPAL ヘッダーで渡すには、JSON ペイロードを Base64 でエンコードする必要があります。 これを行うには、オンラインまたはオフラインのツールを使用できます。 そのようなツールの 1 つが DevToys です。 以前に参照された JSON を表す Base64 でエンコードされたサンプル ペイロード:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
次の cURL 要求は、Book ロールのコンテキストで使用可能なauthor エンティティ レコードの一覧を取得する認証済みユーザーをシミュレートします。
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'