Unauthenticated プロバイダーは、JSON Web トークン (JWT) を検査または検証しないように Data API ビルダー (DAB) に指示します。 すべての要求は、 anonymous ロールとして実行されます。 DAB 内に例外はありません。
注
このセクションで説明する Data API Builder 2.0 の機能は現在プレビュー段階であり、一般公開前に変更される可能性があります。 詳細については、「 バージョン 2.0 の新機能」を参照してください。
DAB の前にある別のサービスが認証を実行したり、アクセス ポリシーを適用したりする場合でも、DAB ですべての要求を anonymousとして扱う場合は、このプロバイダーを使用します。
Important
Unauthenticated プロバイダーは、アップストリーム ID を DAB ID に変換することはありません。 トークンの検証、 authenticated ロールのアクティブ化、カスタム ロールの使用、ダウンストリーム ポリシーへのユーザー要求の受け渡しを行うために DAB が必要な場合は、 EntraId、 Custom、 AppServiceなどの検証プロバイダーを使用します。
認証フロー
Unauthenticated プロバイダーでは、DAB はトークンの検証を完全にスキップし、アクセス許可をanonymousとして評価します。
| Phase | 何が起きるか |
|---|---|
| クライアント要求 | クライアントは、直接または別のサービスを介して DAB に要求を送信します |
| アップストリーム コントロール | フロントエンド、ゲートウェイ、あるいはプロキシは、要求を転送する前に、呼び出し元を認証したり、大まかなアクセス制御を適用したりすることができます。 |
| 要求を転送する | 要求が DAB に到達する |
| DAB 処理 | DAB は JWT を検証せず、常に要求を anonymous として扱います。 |
| 認可 | DAB は、 anonymous ロールのエンティティのアクセス許可を評価します |
このプロバイダーを使用する場合
次のシナリオでは、 Unauthenticated を使用します。
| シナリオ | うまく合っていますか? | なぜでしょうか |
|---|---|---|
| API Management またはゲートウェイが最初にユーザーを認証する | はい | フロントエンドはアクセスをゲートできますが、DAB は引き続き anonymous ロールに対してのみ要求を承認します |
| プライベート ネットワーク境界の背後にある内部専用サービス | はい | ネットワーク アクセスは DAB の外部で制御され、DAB は anonymousのみ維持できます |
| JWT 検証を構成せずにローカルにすばやくセットアップする | はい | 作業を開始する最も簡単な方法 |
| ブラウザーまたはパブリック クライアントに直接公開される DAB | いいえ | DAB が ID トークンを検証しない |
DAB 内で authenticated またはカスタム ロールのアクティブ化が必要です |
いいえ | プロバイダーでanonymousのみがアクティブです。 |
クイック リファレンス
| Setting | 価値 |
|---|---|
| プロバイダー | Unauthenticated |
| トークンが必要 | いいえ |
| アクティブな DAB 役割 | anonymous |
| JWT 検証をサポート | いいえ |
authenticated ロールをサポートします |
いいえ |
| カスタム ロールをサポートする | いいえ |
手順 1: プロバイダーを構成する
認証プロバイダーを Unauthenticatedに設定します。
CLI
dab configure \
--runtime.host.authentication.provider Unauthenticated
結果の構成
{
"runtime": {
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
}
注
プロバイダーは、DAB 2.0 の新しい構成の既定値です。
dab initを実行すると、JWT 設定なしで動作する構成が作成されます。
手順 2: エンティティのアクセス許可を構成する anonymous
DAB はすべての要求を anonymousとして扱うため、エンティティは許可する操作に対して anonymous ロールへのアクセス権を付与する必要があります。
構成例
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "anonymous",
"actions": ["read"]
}
]
}
}
}
エンティティが authenticated またはカスタム ロールにのみアクセス権を付与する場合、要求は失敗します。要求は、 Unauthenticated 構成時にアクティブ化されることはありません。
Important
Unauthenticatedがアクティブな場合、エンティティのアクセス許可で定義されているauthenticatedロールとカスタム ロールはアクティブになりません。 構成にこれらのロールが含まれている場合、DAB は起動時に警告を出力します。
手順 3: 必要に応じて、DAB の前に別のサービスを配置する
要求が DAB に到達する前に、別のサービスで呼び出し元を認証したり、粒度の粗いアクセス規則を適用したりできます。 DAB の動作は変わりません。
- フロントエンド、ゲートウェイ、またはプロキシで呼び出し元を認証します。
- そこで大まかなアクセス ポリシーを適用します。
- 承認された要求を DAB に転送します。
- DAB エンティティのアクセス許可を使用して、
anonymousロールで実行できる操作を制御します。
このパターンは、DAB に到達できるユーザーを周囲のプラットフォームが制御する場合に適切に機能しますが、DAB は意図的に anonymous専用のままです。
このプロバイダーが行わない操作
Unauthenticated プロバイダーでは、次のことはありません。
- ベアラー トークンを検証する
-
authenticatedロールをアクティブ化する - 要求からカスタム ロールをアクティブ化する
- データベース ポリシーでクレームを利用可能にする
- DAB 内でユーザー固有の承認を実行する
これらの機能が必要な場合は、DAB に ID を提供するプロバイダーを使用します。
完全な構成例
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "anonymous",
"actions": ["read"]
}
]
}
}
}