Auth_basic_kv-Berechtigungsüberprüfung und Auth Kv-HTTP-API-Schnittstelle

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   

Wie viel Umsatz kann ein unbekanntes Open-Source-Projekt bringen? Das chinesische KI-Team von Microsoft hat zusammengepackt und ist mit Hunderten von Menschen in die USA gegangen. Huawei gab offiziell bekannt, dass Yu Chengdongs Jobwechsel an der „FFmpeg-Säule der Schande“ festgenagelt wurden vor, aber heute muss er uns danken – Tencent QQ Video rächt seine vergangene Demütigung? Die Open-Source-Spiegelseite der Huazhong University of Science and Technology ist offiziell für den externen Zugriff geöffnet. Bericht: Django ist immer noch die erste Wahl für 74 % der Entwickler. Zed-Editor hat Fortschritte bei der Linux-Unterstützung gemacht brachte die Nachricht: Nachdem er von einem Untergebenen herausgefordert wurde, wurde der technische Leiter wütend und unhöflich, wurde entlassen und schwanger. Die Mitarbeiterin von Alibaba Cloud veröffentlicht offiziell Tongyi Qianwen 2.5. Microsoft spendet 1 Million US-Dollar an die Rust Foundation
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/6606114/blog/11121312
Empfohlen
Rangfolge