NGINX はクラウドネイティブに進化し、すべて OpenNJetで実現
。必要
現在、auth_basic_user_file のみがサポートされています。新しいユーザーを追加し、パスワードを変更するには、ファイルの内容を手動で変更する必要があります。タイプを追加する必要があります: auth_basic_kv、kv を使用してユーザー名/パスワードを保存します
•キーは「auth_basic」:{prefix}:{user_name}、値はパスワードです。 prefix は変数をサポートしているため、server_name などを使用して簡単に設定できます。
•動的にエントリを追加し、パスワードを変更し、削除もサポートするためのHTTPインターフェースを提供します。
2.auth_basic_kv 命令設計
このディレクティブは、main、server、location、limit_conf ブロックで構成できます。例として、auth_basic_kv ディレクティブは、njt_http_auth_basic_module モジュール内に配置されます。これは、auth_basic_user_file ディレクティブと同時に構成できません。
構文 | auth_basic_kv {プレフィックス} |
デフォルト | - |
コンテクスト | メイン、サーバー、場所、limit_conf |
prefix は変数または通常の文字列にすることができます。 kv によって保存される実際のパスワード形式は次のとおりです。 キー: auth_basic:{prefix}:{user_name} 値: パスワード (SHA アルゴリズムを使用)
例えば:
•ユーザー名がnjetであると仮定し、変数$server_name形式を使用します(実際のserver_nameがwww.baidu.comの場合)。kvメモリ内の実際のストレージは次のようになります: キー: auth_basic:www.baidu.com:njet
•ユーザー名が njet で、固定文字列 test_prefix 形式が使用されていると仮定すると、kv メモリ内の実際のストレージは次のようになります。 キー: auth_basic:test_prefix:njet
#变量格式
api_limit_except GET {
auth_basic "OpenNJet AUTH API";
auth_basic_kv $server_name;
}
#字符串格式
api_limit_except GET {
auth_basic "OpenNJet AUTH API";
auth_basic_kv test_prefix;
}
注記:
Http リクエストが来ると、それが変数であれば、その変数は実際の値に変換されてから kv db 内で検索されます。そのため、kv db に格納されている実際の変数の値はすべて変数ではありません。
3. パスワード http API インターフェイスの設計
新しい njt_http_auth_api_module を追加します。他の必須 API モジュール (コントロール プレーンは /api 入口を通じて構成されます) と同様に、http API インターフェイスを提供し、パスワードの追加、削除、および変更機能を提供します: /api/v1/auth_kv/{ type} type: [password| role|login] は現在、パスワードの操作に使用されます。将来は、ロールの役割とログインを操作できます。
3.1 パスワード設定インターフェイス:
PUT:/api/v1/auth_kv/password 本体の形式は次のとおりです。
{
"prefix": "www.baidu.com", #对应上面$server_name变量,此处是实际的变量取值
"user_name": "njet",
"password": "123456"
}
或者
{
"prefix": "test_prefix", #此处是明确的字符串前缀
"user_name": "njet",
"password": "123456"
}
エラーコード | エラーメッセージ | |
---|---|---|
成功を増やす | 0 | 成功 |
このユーザーは既に存在します | 4 | ユーザーが存在しました |
失敗を増やす | 4 | パスワード追加エラー |
パラメータに null 値が含まれています | 3 | プレフィックス、ユーザー名、パスワードは空であってはなりません |
パラメータが不正です | 3 | 特定の JSON エラーが発生します |
パスワード暗号化に失敗しました | 4 | パスワード暗号化エラー |
3.2 パスワード変更インターフェイス:
PATCH:/api/v1/auth_kv/password/{prefix}/{user_name}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
本体の形式は次のとおりです。
{
"password": "123456"
}
エラーコード | エラーメッセージ | |
---|---|---|
正常に変更されました | 0 | 成功 |
ユーザーは存在しません | 4 | ユーザーは存在しません |
編集に失敗する | 4 | パスワード変更エラー |
パラメータに null 値が含まれています | 3 | プレフィックス、ユーザー名、パスワードは空であってはなりません |
パラメータが不正です | 3 | 特定の JSON エラーが発生します |
パスワード暗号化に失敗しました | 4 | パスワード暗号化エラー |
3.3 パスワードインターフェイスの削除:
DELETE:/api/v1/auth_kv/password/{prefix}/{user_name}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
戻り値
エラーコード | エラーメッセージ | |
---|---|---|
ユーザーは正常に削除されました | 0 | 成功 |
ユーザーは存在しません | 4 | ユーザーは存在しません |
ユーザーの削除に失敗しました | 4 | 削除エラー |
4. テスト
4.1 テスト構成 (コントロール プレーン構成の api_limit_exc ブロック テストを例として取り上げます):
テストの例として範囲 API インターフェイスの権限検証を追加します (固定文字列プレフィックス) テストの例として ssl API インターフェイスの権限検証を追加します (変数プレフィックスを使用)
ctrl.conf
...
load_module modules/njt_http_range_api_module.so; #以range api 设置权限验证普通字符串前缀为例测试
load_module modules/njt_http_ssl_api_module.so; #以range api 设置权限验证变量前缀为例测试
load_module modules/njt_http_auth_api_module.so; #auth kv 模块加载
...
http {
server {
listen 8081;
server_name www.test.com; #下面使用$server_name变量测试
location /api {
dyn_module_api;
api_limit_except /v1/range PUT {
auth_basic "OpenNJet range API";
auth_basic_kv test_kv; #range 使用固定前缀字符串测试
}
api_limit_except /v1/ssl PUT {
auth_basic "OpenNJet ssl API";
auth_basic_kv $server_name; #ssl 使用变量前缀测试
}
}
location /doc {
doc_api;
}
}
}
4.2 範囲固定文字列プレフィックス テスト (ユーザー名: njet パスワード 123456)
PUT ユーザー名とパスワードを追加します。njet ユーザーとパスワード 123456 が存在しません。範囲 API の get インターフェイスにアクセスし、パスワードの入力を求められ、njet/123456 と入力すると、検証は失敗します。
認証構成を通じてユーザー名とパスワードを構成する (njet/123456)
再度範囲取得インターフェイスにアクセスし、 njet/123456 と入力すると、検証に成功します。
PATCHパスワード変更テスト
範囲取得インターフェイスを再確認し、njet/12345 を使用すると失敗します。
njet/654321 を使用し、検証に合格しました
DELETE パスワードの削除テスト パスワードの削除
再び範囲にアクセスすると失敗します
4.3 変数プレフィックスを使用した ssl テスト (ユーザー名: ssl パスワード 123456)
PUT ユーザー名とパスワードを追加します。最初に ssl ユーザーとパスワード 123456 が存在しないことをテストします。ssl/123456 と入力します。
認証構成を通じてユーザー名とパスワードを構成します (ssl/123456)。プレフィックスとして www.test.com を使用します。
ssl get インターフェイスに再度アクセスし、「ssl/123456」と入力すると、検証に成功します。
PATCHパスワード変更テスト
ssl get インターフェイスに再アクセスし、ssl/12345 を使用すると失敗します。
ssl/654321 を使用し、検証に合格しました
DELETE パスワードの削除テスト パスワードの削除
再度SSLにアクセスしましたが失敗しました
NJet アプリケーション エンジンは、カーネルの再構築を通じて独自のランタイム動的構成読み込み機能を実現し、新世代の高性能 Web アプリケーション エンジンです。 NJet は、高性能のデータ プレーン処理機能を備えており、NJet 独自のコパイロット CoPilot サービス フレームワークを通じて、クラスタリング、高可用性、アクティブ ヘルス チェック、宣言型 API などの複数の補助機能をスケジュールして、機能拡張を促進し、管理/制御機能ペアを分離します。データ プレーンへの影響を考慮すると、NJet アプリケーション エンジンのパフォーマンスは、CNCF が推奨する Envoy アプリケーション エンジンの 3 倍を超えています。メールグループ公式サイト