basic-auth プラグインは、HTTP Basic 認証標準に基づいてリクエストを認証および認可します。
プラグインタイプ
認証および認可
フィールド
認証設定
|
フィールド |
データ型 |
必須 |
デフォルト値 |
説明 |
|
consumers |
オブジェクトの配列 |
はい |
- |
リクエストの認証に使用するコンシューマー (サービス呼び出し元) です。 |
|
global_auth |
ブール値 |
いいえ (インスタンスレベルで設定する場合のみ必須) |
- |
インスタンスレベルでのみ設定できます。true に設定すると、認証はグローバルに適用されます。false に設定すると、認証は設定済みのドメイン名とルートにのみ適用されます。設定しない場合、下位互換性のため、ドメイン名またはルートが設定されていないときに限り、認証がグローバルに適用されます。 |
consumers 内のフィールド:
|
フィールド |
データ型 |
必須 |
デフォルト値 |
説明 |
|
credential |
文字列 |
はい |
- |
コンシューマーのアクセス認証情報です。 |
|
name |
文字列 |
はい |
- |
コンシューマー名です。 |
(オプション) 認可設定
|
フィールド |
データ型 |
必須 |
デフォルト値 |
説明 |
|
allow |
文字列の配列 |
ルートまたはドメイン名レベルで設定する場合に必須 |
- |
ルートレベルまたはドメイン名レベルでのみ設定可能です。設定された条件に一致するリクエストに対し、アクセスを許可するコンシューマーを指定します。 |
-
認可設定と認証設定は、同一ルール内で共存できません。
-
認証されたリクエストでは、呼び出し元を識別するために
X-Mse-Consumerフィールドがリクエストヘッダーに追加されます。
例
認証のグローバル設定とルートへの認可設定
この例では、ゲートウェイの特定のルートまたはドメインに対して Basic 認証と認可を有効にします。
-
認証情報内のユーザー名とパスワードはコロン (:) で区切ります。
-
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ルートは、ゲートウェイのルート作成時に指定したものです。クライアントリクエストがいずれかのルートに一致した場合、nameがconsumer1である呼び出し元にゲートウェイへのアクセスを許可します。それ以外の呼び出し元にはゲートウェイへのアクセスを許可しません。 -
この例の
*.example.comおよびtest.comドメイン名は、リクエスト内のドメイン名とのマッチングに使用します。クライアントリクエストがいずれかのドメイン名に一致した場合、nameがconsumer2である呼び出し元にゲートウェイへのアクセスを許可します。それ以外の呼び出し元にはゲートウェイへのアクセスを許可しません。
これらの設定では、次のリクエストが許可されます:
リクエストでユーザー名とパスワードを指定します。
# この例では、リクエスト内の 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
ゲートウェイでの認証の有効化
次の設定を適用して、インスタンスレベルの Basic 認証を有効にします。以降、すべてのリクエストで認証が必要になります。
global_auth: true
consumers:
- credential: 'admin:123456'
name: consumer1
- credential: 'guest:abc'
name: consumer2
エラーコード
|
HTTP ステータスコード |
エラーメッセージ |
理由 |
|
401 |
Request denied by Basic Auth check. No Basic Authentication information found. |
リクエストに認証情報が指定されていません。 |
|
401 |
Request denied by Basic Auth check. Invalid username and/or password. |
リクエスト内の認証情報が無効です。 |
|
403 |
Request denied by Basic Auth check. Unauthorized consumer. |
呼び出し元にアクセス権限がありません。 |