NGINX évolue vers le cloud natif, tout dans OpenNJet
.besoin
Actuellement, seul auth_basic_user_file est pris en charge. Vous devez modifier manuellement le contenu du fichier pour ajouter de nouveaux utilisateurs et modifier les mots de passe. Besoin d'ajouter un type : auth_basic_kv, utilisez kv pour stocker le nom d'utilisateur/mot de passe
•La clé est "auth_basic" :{prefix} :{user_name}, la valeur est le mot de passe. le préfixe prend en charge les variables afin que le nom du serveur, etc. puisse être utilisé pour une configuration facile.
• Fournir une interface HTTP pour ajouter dynamiquement des entrées, modifier les mots de passe et également prendre en charge la suppression
2.auth_basic_kvConception des instructions
Cette directive peut être configurée dans les blocs main, server, location, limit_conf. En prenant comme exemple api_limit_sauf, la directive auth_basic_kv est placée dans le module njt_http_auth_basic_module. Elle peut être configurée avec la directive auth_basic_user_file. Elle ne peut pas être configurée en même temps.
Syntaxe | auth_basic_kv {préfixe} |
Défaut | - |
Contexte | principal, serveur, emplacement, limite_conf |
le préfixe peut être une variable ou une chaîne ordinaire. Le format de mot de passe réel stocké par kv est : Clé : auth_basic:{prefix}:{user_name} Valeur : Mot de passe (en utilisant l'algorithme SHA)
Par exemple:
• Supposons que le nom d'utilisateur soit njet, utilisez le format variable $server_name (si le nom de serveur réel est www.baidu.com), le stockage réel dans la mémoire kv est : Clé : auth_basic:www.baidu.com:njet
•En supposant que le nom d'utilisateur est njet et que le format de chaîne fixe test_prefix est utilisé, le stockage réel dans la mémoire kv est : Clé : 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;
}
NOTE:
Lorsque la requête HTTP arrive, s'il s'agit d'une variable, la variable sera convertie en valeur réelle, puis recherchée dans kv db. Par conséquent, toutes les valeurs de variable réelles stockées dans kv db ne sont pas des variables.
3. Conception de l'interface de l'API http avec mot de passe
Ajoutez un nouveau njt_http_auth_api_module. Comme les autres modules API impératifs (le plan de contrôle est configuré via l'entrée /api), il fournit une interface API http et fournit des fonctions d'ajout, de suppression et de modification de mot de passe : /api/v1/auth_kv/{. type} type : [mot de passe | rôle | connexion] est réservé. Actuellement, le type de mot de passe est utilisé pour utiliser le mot de passe. À l'avenir, le rôle et la connexion pourront être utilisés.
3.1 Définir l'interface du mot de passe :
Le corps PUT:/api/v1/auth_kv/password a le format suivant :
{
"prefix": "www.baidu.com", #对应上面$server_name变量,此处是实际的变量取值
"user_name": "njet",
"password": "123456"
}
或者
{
"prefix": "test_prefix", #此处是明确的字符串前缀
"user_name": "njet",
"password": "123456"
}
code d'erreur | Message d'erreur | |
---|---|---|
augmenter le succès | 0 | succès |
L'utilisateur existe déjà | 4 | l'utilisateur existait |
augmenter l'échec | 4 | erreur d'ajout de mot de passe |
Le paramètre a une valeur nulle | 3 | le préfixe, le nom d'utilisateur et le mot de passe ne doivent pas être vides |
Le paramètre est illégal | 3 | Il y aura des erreurs json spécifiques |
Le cryptage du mot de passe a échoué | 4 | erreur de cryptage du mot de passe |
3.2 Interface de modification du mot de passe :
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
Le corps a le format suivant :
{
"password": "123456"
}
code d'erreur | Message d'erreur | |
---|---|---|
Modification réussie | 0 | succès |
L'utilisateur n'existe pas | 4 | l'utilisateur n'existe pas |
ne pas réussir à modifier | 4 | erreur de modification du mot de passe |
Le paramètre a une valeur nulle | 3 | le préfixe, le nom d'utilisateur et le mot de passe ne doivent pas être vides |
Le paramètre est illégal | 3 | Il y aura des erreurs json spécifiques |
Le cryptage du mot de passe a échoué | 4 | erreur de cryptage du mot de passe |
3.3 Supprimer l'interface du mot de passe :
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
valeur de retour
code d'erreur | Message d'erreur | |
---|---|---|
Utilisateur supprimé avec succès | 0 | succès |
L'utilisateur n'existe pas | 4 | l'utilisateur n'existe pas |
La suppression de l'utilisateur a échoué | 4 | erreur de suppression |
4. Testez
4.1 Configuration de test (en prenant comme exemple le test de bloc de configuration du plan de contrôle api_limit_sauf) :
Ajouter une vérification d'autorisation pour l'interface API de plage comme exemple de test (préfixe de chaîne fixe) Ajouter une vérification d'autorisation pour l'interface API SSL comme exemple de test (utiliser un préfixe variable)
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;
}
}
}
Test de préfixe de chaîne fixe de plage 4.2 (nom d'utilisateur : mot de passe njet 123456)
PUT Ajouter le nom d'utilisateur et le mot de passe. Le test initial n'existe pas d'utilisateur njet et de mot de passe 123456. Accédez à l'interface d'obtention de l'API de plage, invitez à saisir le mot de passe, entrez njet/123456, la vérification échoue.
Configurez le nom d'utilisateur et le mot de passe via la configuration d'authentification, njet/123456
Visitez à nouveau l’interface range get, entrez njet/123456 et la vérification est réussie.
Test de changement de mot de passe PATCH
Revisitez l’interface range get et utilisez njet/12345 pour échouer.
Utilisez njet/654321, vérification réussie
SUPPRIMER supprimer le mot de passe tester supprimer le mot de passe
Accédez à nouveau à la plage et échouez
4.3 Test SSL en utilisant un préfixe variable (nom d'utilisateur : mot de passe SSL 123456)
PUT Ajoutez un nom d'utilisateur et un mot de passe. Vérifiez qu'il n'y a pas d'utilisateur SSL et de mot de passe 123456. Accédez à l'interface de plage SSL Get et demandez le mot de passe. La vérification échoue.
Configurez le nom d'utilisateur et le mot de passe via la configuration d'authentification, ssl/123456, utilisez www.test.com comme préfixe.
Accédez à nouveau à l'interface SSL Get, entrez ssl/123456 et la vérification est réussie.
Test de changement de mot de passe PATCH
Accédez à nouveau à l'interface SSL Get et utilisez ssl/12345 pour échouer.
Utilisez SSL/654321, vérification réussie
SUPPRIMER supprimer le mot de passe tester supprimer le mot de passe
Accédez à nouveau à SSL, échec
Le moteur d'application NJet offre des capacités uniques de chargement de configuration dynamique d'exécution grâce à la reconstruction du noyau et constitue une nouvelle génération de moteur d'application Web hautes performances . NJet dispose de capacités de traitement de plan de données hautes performances et planifie plusieurs fonctions auxiliaires telles que le clustering, la haute disponibilité, les contrôles de santé actifs et les API déclaratives via le cadre de service copilote unique CoPilot de NJet pour faciliter l'expansion des fonctions et isoler les paires de fonctions de gestion/contrôle dues. Compte tenu de l'impact sur le plan des données, les performances du moteur d'application NJet dépassent trois fois celles du moteur d'application Envoy recommandé par la CNCF. Site officiel du groupe de messagerie