NGINX evoluciona hacia la nube nativa, todo en OpenNJet
.necesidad
Actualmente, solo se admite auth_basic_user_file. Debe modificar manualmente el contenido del archivo para agregar nuevos usuarios y cambiar contraseñas. Es necesario agregar un tipo: auth_basic_kv, use kv para almacenar el nombre de usuario/contraseña
•La clave es "auth_basic":{prefix}:{user_name}, el valor es la contraseña. El prefijo admite variables para que nombre_servidor, etc. se puedan utilizar para una configuración sencilla.
•Proporciona una interfaz HTTP para agregar entradas dinámicamente, cambiar contraseñas y también admitir la eliminación
2.diseño de instrucciones auth_basic_kv
Esta directiva se puede configurar en los bloques main, server, location, limit_conf. Tomando api_limit_except como ejemplo, la directiva auth_basic_kv se coloca en el módulo njt_http_auth_basic_module. Se puede configurar con la directiva auth_basic_user_file.
Sintaxis | auth_basic_kv {prefijo} |
Por defecto | - |
Contexto | principal,servidor,ubicación,limit_conf |
El prefijo puede ser una variable o una cadena normal. El formato de contraseña real almacenado por kv es: Clave: auth_basic:{prefix}:{user_name} Valor: Contraseña (usando el algoritmo SHA).
P.ej:
•Supongamos que el nombre de usuario es njet, utilice el formato variable $server_name (si el nombre_servidor real es www.baidu.com), el almacenamiento real en la memoria kv es: Clave: auth_basic:www.baidu.com:njet
•Suponiendo que el nombre de usuario es njet y se utiliza el formato de cadena fija test_prefix, el almacenamiento real en la memoria kv es: Clave: 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;
}
NOTA:
Cuando llega la solicitud Http, si es una variable, la variable se convertirá en un valor real y luego se buscará en kv db. Por lo tanto, todos los valores de variables reales almacenados en kv db no son variables.
3. Diseño de interfaz API http de contraseña
Agregue un nuevo njt_http_auth_api_module. Al igual que otros módulos de API imperativos (el plano de control se configura a través de la entrada /api), proporciona una interfaz de API http y proporciona funciones de adición, eliminación y modificación de contraseñas: /api/v1/auth_kv/{. tipo} tipo: [contraseña | rol | inicio de sesión] actualmente, el tipo de contraseña se usa para operar la contraseña. En el futuro, se pueden operar el rol y el inicio de sesión.
3.1 Establecer interfaz de contraseña:
PUT:/api/v1/auth_kv/el cuerpo de la contraseña tiene el siguiente formato:
{
"prefix": "www.baidu.com", #对应上面$server_name变量,此处是实际的变量取值
"user_name": "njet",
"password": "123456"
}
或者
{
"prefix": "test_prefix", #此处是明确的字符串前缀
"user_name": "njet",
"password": "123456"
}
código de error | Mensaje de error | |
---|---|---|
aumentar el éxito | 0 | éxito |
El usuario ya existe | 4 | el usuario existió |
aumentar el fracaso | 4 | error al agregar contraseña |
El parámetro tiene valor nulo. | 3 | prefijo, nombre de usuario y contraseña no deben estar vacíos |
El parámetro es ilegal. | 3 | Habrá errores json específicos |
Falló el cifrado de contraseña | 4 | error de cifrado de contraseña |
3.2 Interfaz de modificación de contraseña:
PARCHE:/api/v1/auth_kv/contraseña/{prefijo}/{nombre_usuario}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
El cuerpo tiene el siguiente formato:
{
"password": "123456"
}
código de error | Mensaje de error | |
---|---|---|
Modificado con éxito | 0 | éxito |
el usuario no existe | 4 | el usuario no existe |
no se puede editar | 4 | error modificar contraseña |
El parámetro tiene valor nulo. | 3 | prefijo, nombre de usuario y contraseña no deben estar vacíos |
El parámetro es ilegal. | 3 | Habrá errores json específicos |
Falló el cifrado de contraseña | 4 | error de cifrado de contraseña |
3.3 Eliminar interfaz de contraseña:
ELIMINAR:/api/v1/auth_kv/contraseña/{prefijo}/{nombre de usuario}
#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet
或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet
valor de retorno
código de error | Mensaje de error | |
---|---|---|
Usuario eliminado exitosamente | 0 | éxito |
el usuario no existe | 4 | el usuario no existe |
Error al eliminar el usuario | 4 | borrar error |
4. Prueba
4.1 Configuración de prueba (tomando la prueba de bloque api_limit_except de configuración del plano de control como ejemplo):
Agregue verificación de permisos para la interfaz API de rango como ejemplo para pruebas (prefijo de cadena fijo) Agregue verificación de permisos para la interfaz API SSL como ejemplo para pruebas (use prefijo 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;
}
}
}
Prueba de prefijo de cadena fija de rango 4.2 (nombre de usuario: contraseña de njet 123456)
PUT Agregue el nombre de usuario y la contraseña. La prueba inicial no existe njet usuario y contraseña 123456. Acceda a la interfaz de obtención de API de rango, solicite ingresar la contraseña, ingrese njet/123456, la verificación falla.
Configure el nombre de usuario y la contraseña mediante la configuración de autenticación, njet/123456
Visite nuevamente la interfaz de obtención de rango, ingrese njet/123456 y la verificación se aprobará con éxito.
Prueba de cambio de contraseña de PATCH
Vuelva a visitar la interfaz de obtención de rango y use njet/12345 para fallar.
Utilice njet/654321, verificación aprobada
BORRAR eliminar contraseña prueba eliminar contraseña
Accede al rango nuevamente y falla.
4.3 prueba ssl usando prefijo variable (nombre de usuario: contraseña ssl 123456)
PUT Agregue el nombre de usuario y la contraseña. Pruebe que no haya ningún usuario SSL y contraseña 123456. Acceda a la interfaz de obtención de SSL y solicite la contraseña.
Configure el nombre de usuario y la contraseña a través de la configuración de autenticación, ssl/123456, use www.test.com como prefijo.
Acceda nuevamente a la interfaz ssl get, ingrese ssl/123456 y la verificación se realizará con éxito.
Prueba de cambio de contraseña de PATCH
Vuelva a acceder a la interfaz ssl get y use ssl/12345 para fallar.
Utilice ssl/654321, verificación aprobada
BORRAR eliminar contraseña prueba eliminar contraseña
Acceder a ssl nuevamente, falló
El motor de aplicaciones NJet logra capacidades únicas de carga de configuración dinámica en tiempo de ejecución a través de la reconstrucción del kernel y es una nueva generación de motores de aplicaciones web de alto rendimiento . NJet tiene capacidades de procesamiento de planos de datos de alto rendimiento y programa múltiples funciones auxiliares, como agrupación en clústeres, alta disponibilidad, comprobaciones de estado activas y API declarativas a través del marco de servicio CoPilot exclusivo de NJet para facilitar la expansión de funciones y aislar los pares de funciones de gestión/control. Además del impacto en el plano de datos, el rendimiento del motor de aplicaciones NJet supera tres veces el del motor de aplicaciones Envoy recomendado por CNCF. Sitio web oficial del grupo de correo.