NGINX entwickelt sich zu Cloud Native weiter, alles in OpenNJet
.brauchen
Derzeit wird nur auth_basic_user_file unterstützt. Sie müssen den Inhalt der Datei manuell ändern, um neue Benutzer hinzuzufügen und Passwörter zu ändern. Sie müssen einen Typ hinzufügen: auth_basic_kv, verwenden Sie kv, um Benutzername/Passwort zu speichern
•Der Schlüssel ist „auth_basic“:{Präfix}:{Benutzername}, der Wert ist das Passwort. Das Präfix unterstützt Variablen, sodass Servername usw. zur einfachen Konfiguration verwendet werden können.
•Stellen Sie eine HTTP-Schnittstelle bereit, um Einträge dynamisch hinzuzufügen, Passwörter zu ändern und auch das Löschen zu unterstützen
2.auth_basic_kv-Anweisungsdesign
Diese Direktive kann in den Blöcken „main“, „server“, „location“ und „limit_conf“ konfiguriert werden. Die Direktive „auth_basic_kv“ wird im Modul „njt_http_auth_basic_module“ platziert. Sie kann nicht gleichzeitig konfiguriert werden.
Syntax | auth_basic_kv {Präfix} |
Standard | - |
Kontext | main,server,location,limit_conf |
Präfix kann eine Variable oder eine gewöhnliche Zeichenfolge sein. Das tatsächliche von kv gespeicherte Passwortformat ist: Schlüssel: auth_basic:{Präfix}:{Benutzername} Wert: Passwort (unter Verwendung des SHA-Algorithmus)
Z.B:
•Angenommen, der Benutzername ist njet, verwenden Sie das Format der Variable $server_name (wenn der tatsächliche Servername www.baidu.com ist), der tatsächliche Speicher im KV-Speicher ist: Schlüssel: auth_basic:www.baidu.com:njet
•Unter der Annahme, dass der Benutzername njet ist und das test_prefix-Format mit fester Zeichenfolge verwendet wird, lautet der tatsächliche Speicher im KV-Speicher: Schlüssel: 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;
}
NOTIZ:
Wenn die HTTP-Anfrage eingeht und es sich um eine Variable handelt, wird die Variable in einen tatsächlichen Wert konvertiert und dann in der kv-Datenbank gesucht. Daher sind alle in der kv-Datenbank gespeicherten tatsächlichen Variablenwerte keine Variablen.
3. Design der http-API-Schnittstelle mit Passwort
Fügen Sie ein neues njt_http_auth_api_module hinzu (die Steuerungsebene wird über den /api-Eingang konfiguriert) und bietet einheitliche Funktionen zum Hinzufügen, Löschen und Ändern von Passwörtern: /api/v1/auth_kv/{ Typ} Typ: [Passwort|.Rolle|Login] ist derzeit für den Betrieb des Passworts reserviert. In Zukunft können die Rollenrolle und der Login bedient werden.
3.1 Passwortschnittstelle festlegen:
Der Hauptteil von PUT:/api/v1/auth_kv/password hat das folgende Format:
{
"prefix": "www.baidu.com", #对应上面$server_name变量,此处是实际的变量取值
"user_name": "njet",
"password": "123456"
}
或者
{
"prefix": "test_prefix", #此处是明确的字符串前缀
"user_name": "njet",
"password": "123456"
}
Fehlercode | Fehlermeldung | |
---|---|---|
Erfolg steigern | 0 | Erfolg |
Benutzer existiert bereits | 4 | Benutzer existierte |
das Scheitern erhöhen | 4 | Fehler beim Hinzufügen des Passworts |
Parameter hat Nullwert | 3 | Präfix, Benutzername und Passwort dürfen nicht leer sein |
Parameter ist unzulässig | 3 | Es treten bestimmte JSON-Fehler auf |
Die Passwortverschlüsselung ist fehlgeschlagen | 4 | Fehler bei der Passwortverschlüsselung |
3.2 Schnittstelle zur Passwortänderung:
PATCH:/api/v1/auth_kv/password/{Präfix}/{Benutzername}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
Der Körper hat das folgende Format:
{
"password": "123456"
}
Fehlercode | Fehlermeldung | |
---|---|---|
Erfolgreich geändert | 0 | Erfolg |
Benutzer existiert nicht | 4 | Benutzer existiert nicht |
kann nicht bearbeitet werden | 4 | Fehler beim Ändern des Passworts |
Parameter hat Nullwert | 3 | Präfix, Benutzername und Passwort dürfen nicht leer sein |
Parameter ist unzulässig | 3 | Es treten bestimmte JSON-Fehler auf |
Die Passwortverschlüsselung ist fehlgeschlagen | 4 | Fehler bei der Passwortverschlüsselung |
3.3 Schnittstelle „Passwort löschen“:
LÖSCHEN:/api/v1/auth_kv/password/{Präfix}/{Benutzername}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
Rückgabewert
Fehlercode | Fehlermeldung | |
---|---|---|
Benutzer erfolgreich gelöscht | 0 | Erfolg |
Benutzer existiert nicht | 4 | Benutzer ist nicht vorhanden |
Das Löschen des Benutzers ist fehlgeschlagen | 4 | Fehler löschen |
4. Testen
4.1 Testkonfiguration (am Beispiel des Blocktests der Steuerungsebenenkonfiguration api_limit_exclusive):
Berechtigungsüberprüfung für die Bereichs-API-Schnittstelle als Beispiel zum Testen hinzufügen (festes Zeichenfolgenpräfix) Berechtigungsüberprüfung für die SSL-API-Schnittstelle als Beispiel zum Testen hinzufügen (variables Präfix verwenden)
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 Bereichstest mit festem String-Präfix (Benutzername: njet-Passwort 123456)
PUT Benutzername und Passwort hinzufügen. Der erste Test besteht nicht aus njet-Benutzer und Passwort 123456. Greifen Sie auf die API-Get-Schnittstelle des Bereichs zu, fordern Sie zur Eingabe des Passworts auf, geben Sie njet/123456 ein, die Überprüfung schlägt fehl.
Konfigurieren Sie Benutzernamen und Passwort über die Authentifizierungskonfiguration, njet/123456
Besuchen Sie die Range-Get-Schnittstelle erneut, geben Sie njet/123456 ein und die Überprüfung wurde erfolgreich bestanden.
PATCH-Passwort-Änderungstest
Besuchen Sie die Range-Get-Schnittstelle erneut und verwenden Sie njet/12345, um einen Fehler zu verursachen.
Verwenden Sie njet/654321, Überprüfung bestanden
DELETE Passwort löschen Test Passwort löschen
Greifen Sie erneut auf den Bereich zu und schlagen Sie fehl
4.3 SSL-Test mit variablem Präfix (Benutzername: SSL-Passwort 123456)
PUT Benutzername und Passwort hinzufügen. Überprüfen Sie zunächst, ob der SSL-Benutzername und das Passwort 123456 vorhanden sind. Die Bestätigung schlägt fehl.
Konfigurieren Sie den Benutzernamen und das Passwort über die Authentifizierungskonfiguration, ssl/123456, verwenden Sie www.test.com als Präfix.
Greifen Sie erneut auf die SSL-Get-Schnittstelle zu, geben Sie ssl/123456 ein und die Überprüfung ist erfolgreich.
PATCH-Passwort-Änderungstest
Greifen Sie erneut auf die SSL-Get-Schnittstelle zu und verwenden Sie ssl/12345, um einen Fehler zu verursachen.
Verwenden Sie SSL/654321, die Überprüfung wurde bestanden
DELETE Passwort löschen Test Passwort löschen
Erneuter Zugriff auf SSL, fehlgeschlagen
Die NJet -Anwendungs-Engine erreicht durch Kernel-Rekonstruktion einzigartige Funktionen zum dynamischen Laden von Konfigurationen zur Laufzeit und ist eine neue Generation leistungsstarker Web-Anwendungs-Engines . NJet verfügt über leistungsstarke Datenebenenverarbeitungsfunktionen und plant mehrere Hilfsfunktionen wie Clustering, Hochverfügbarkeit, aktive Zustandsprüfungen und deklarative APIs über das einzigartige Co-Pilot-Service-Framework von NJet, um Funktionserweiterungen zu erleichtern und fällige Verwaltungs-/Kontrollfunktionspaare zu isolieren Aufgrund der Auswirkungen auf die Datenebene ist die Leistung der NJet-Anwendungs-Engine dreimal so hoch wie die der von CNCF empfohlenen Envoy-Anwendungs-Engine. Offizielle Website der Mail-Gruppe