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
ルートは、ゲートウェイルートの作成時に指定されたルートです。クライアントリクエストがいずれかのルートと一致する場合、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
ゲートウェイの認証を有効にする
ゲートウェイに次の設定を適用すると、インスタンスレベルでベーシック認証が有効になり、すべてのリクエストはゲートウェイにアクセスするために認証される必要があります。
global_auth: true
consumers:
- credential: 'admin:123456' // ユーザー名とパスワードを指定
name: consumer1
- credential: 'guest:abc' // ユーザー名とパスワードを指定
name: consumer2
HTTP ステータスコード
HTTP ステータスコード | エラーメッセージ | 理由 |
401 | ベーシック認証チェックによってリクエストが拒否されました。ベーシック認証情報が見つかりません。 | リクエストに資格情報が指定されていません。 |
401 | ベーシック認証チェックによってリクエストが拒否されました。ユーザー名またはパスワードが無効です。 | リクエストの資格情報が無効です。 |
403 | ベーシック認証チェックによってリクエストが拒否されました。承認されていないコンシューマーです。 | リクエストの呼び出し元にアクセス許可がありません。 |