次の方法で共有


認証されていないプロバイダーを構成する

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 が必要な場合は、 EntraIdCustomAppServiceなどの検証プロバイダーを使用します。

認証フロー

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 の動作は変わりません。

  1. フロントエンド、ゲートウェイ、またはプロキシで呼び出し元を認証します。
  2. そこで大まかなアクセス ポリシーを適用します。
  3. 承認された要求を DAB に転送します。
  4. 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"]
        }
      ]
    }
  }
}