すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:basic-auth

最終更新日:Jan 08, 2025

basic-auth プラグインは、HTTP ベーシック認証仕様に基づく認証に使用されます。このトピックでは、basic-auth プラグインの設定方法について説明します。

プラグインの種類

認証プラグイン。

フィールド

認証設定

名前

データ型

必須

デフォルト値

説明

consumers

オブジェクトの配列

はい

-

サービスの呼び出し元。このフィールドは、リクエストを認証するために使用されます。

global_auth

文字列の配列

いいえ(インスタンスレベルの設定にのみ必要)

-

global_auth が true に設定されている場合、認証メカニズムはグローバルに有効になります。 global_auth が false に設定されている場合、認証メカニズムは設定したドメイン名とルートに対してのみ有効になります。 global_auth が設定されていない場合、認証メカニズムは、ドメイン名とルートが設定されていない場合にのみグローバルに有効になります。

次の表は、consumers フィールドの設定項目について説明しています。

名前

データ型

必須

デフォルト値

説明

credential

文字列

はい

-

コンシューマーのアクセス資格情報。

name

文字列

はい

-

コンシューマーの名前。

承認設定(オプション)

名前

データ型

必須

デフォルト値

説明

allow

文字列の配列

いいえ(インスタンスレベル以外の設定に必要)

-

このフィールドは、ルートやドメイン名などの細かい粒度でのみ設定できます。一致条件を満たすリクエストに対して、アクセスを許可するコンシューマーを設定できます。これにより、きめ細かい権限制御が実装されます。

重要
  • 承認設定と認証設定は、1 つのルールに共存できません。

  • 認証および承認されたリクエストの場合、リクエストヘッダーに X-Mse-Consumer フィールドが追加され、呼び出し元の名前が識別されます。

設定例

グローバル認証とルートレベルの承認を設定する

このセクションでは、ゲートウェイの特定のルートまたはドメインに対してベーシック認証と承認を有効にする方法の例を示します。

説明
  • 資格情報におけるユーザー名とパスワードは、コロン(:)で区切られます。

  • credential 設定項目は一意である必要があります。

インスタンスレベルで次のプラグイン設定を適用します:

global_auth: false
consumers:
- credential: 'admin:123456'  // ユーザー名とパスワードを指定
  name: consumer1
- credential: 'guest:abc' // ユーザー名とパスワードを指定
  name: consumer2

route-a ルートと route-b ルートに次のプラグイン設定を適用します:

allow:
- consumer1

*.example.com ドメイン名と test.com ドメイン名に次のプラグイン設定を適用します:

allow:
- consumer2
説明
  • この例では、route-a ルートと route-b ルートは、ゲートウェイルートの作成時に指定されたルートです。クライアントリクエストがいずれかのルートと一致する場合、nameconsumer1 である呼び出し元はゲートウェイへのアクセスを許可されます。他の呼び出し元はゲートウェイにアクセスできません。

  • この例では、*.example.com ドメイン名と test.com ドメイン名は、リクエスト内のドメイン名と照合するために使用されます。クライアントリクエストがいずれかのドメイン名と一致する場合、nameconsumer2 である呼び出し元はゲートウェイへのアクセスを許可されます。他の呼び出し元はゲートウェイにアクセスできません。

上記の構成では、次のリクエストからのアクセスが許可されます。

リクエストにユーザー名とパスワードが指定されています。

# この例では、リクエスト内の route-a が一致します。
# curl コマンドの -u パラメーターを使用して、ユーザー名とパスワードを指定します。
curl -u admin:123456  http://xxx.hello.com/test
# ユーザー名とパスワードが base64 エンコードされた Authorization リクエストヘッダーを直接指定することもできます。
curl -H 'Authorization: Basic YWRtaW46MTIzNDU2'  http://xxx.hello.com/test

認証が通過すると、リクエストのヘッダーに X-Mse-Consumer フィールドが追加され、呼び出し元が識別されます。この例では、このフィールドの値は consumer1 です。

上記の構成では、次のリクエストからのアクセスが拒否されます。

  • リクエストにユーザー名とパスワードが指定されておらず、HTTP ステータスコード 401 が返されます。

    curl  http://xxx.hello.com/test
  • リクエストのユーザー名またはパスワードが無効であり、HTTP ステータスコード 401 が返されます。

    curl -u admin:abc  http://xxx.hello.com/test
  • リクエストのユーザー名とパスワードに一致する呼び出し元にアクセス許可がなく、HTTP ステータスコード 403 が返されます。

    # consumer2 という名前のコンシューマーは、route-a の許可リストにありません。
    curl -u guest:abc  http://xxx.hello.com/test

ゲートウェイの認証を有効にする

ゲートウェイに次の設定を適用すると、インスタンスレベルでベーシック認証が有効になり、すべてのリクエストはゲートウェイにアクセスするために認証される必要があります。

global_auth: true
consumers:
- credential: 'admin:123456' // ユーザー名とパスワードを指定
  name: consumer1
- credential: 'guest:abc' // ユーザー名とパスワードを指定
  name: consumer2

HTTP ステータスコード

HTTP ステータスコード

エラーメッセージ

理由

401

ベーシック認証チェックによってリクエストが拒否されました。ベーシック認証情報が見つかりません。

リクエストに資格情報が指定されていません。

401

ベーシック認証チェックによってリクエストが拒否されました。ユーザー名またはパスワードが無効です。

リクエストの資格情報が無効です。

403

ベーシック認証チェックによってリクエストが拒否されました。承認されていないコンシューマーです。

リクエストの呼び出し元にアクセス許可がありません。