Auth_basic_kv 权限校验以及Auth Kv Http API 接口
NGINX 向云原生演进,All in OpenNJet
.需求
当前仅仅支持auth_basic_user_file,需要手工修改 file的内容增加新的用户,修改密码。 需添加一种类型: auth_basic_kv,利用kv存储用户名/密码
•key为 “auth_basic”:{prefix}:{user_name}, value 为 密码。 prefix支持变量,以便使用server_name等,方便配置。
•提供HTTP接口,实现动态增加条目,或修改密码,也支持删除
2.auth_basic_kv 指令设计
该指令可配置在main, server, location, limit_conf 块中以api_limit_except为例进行说明 auth_basic_kv指令放在 njt_http_auth_basic_module 模块中,与auth_basic_user_file 指令配置二选一,不可同时配置
Syntax | auth_basic_kv {prefix} |
Default | - |
Context | main,server,location,limit_conf |
prefix 即可为变量也可为普通字符串 kv存储的实际密码格式为: Key: auth_basic:{prefix}:{user_name} Value: 密码 (采用SHA算法)
Eg:
•假设用户名为njet, 使用变量 $server_name格式,(如果实际server_name 为www.baidu.com)则kv内存实际存储为: Key: auth_basic:www.baidu.com:njet
•假设用户名为njet, 使用固定字符串test_prefix格式,则kv内存实际存储为: Key: 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:
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] 预留,目前时就password类型操作密码, 以后可以操作role角色以及login登陆
3.1 设置密码接口:
PUT:/api/v1/auth_kv/password body如下格式:
{ "prefix": "www.baidu.com", #对应上面$server_name变量,此处是实际的变量取值 "user_name": "njet", "password": "123456" } 或者 { "prefix": "test_prefix", #此处是明确的字符串前缀 "user_name": "njet", "password": "123456" }
错误码 | 错误提示 | |
---|---|---|
增加成功 | 0 | success |
用户已存在 | 4 | user existed |
增加失败 | 4 | add password error |
参数有空值 | 3 | prefix,user_name and password should not be empty |
参数不合法 | 3 | 会有具体json错误 |
密码加密失败 | 4 | password encrypt error |
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
body如下格式:
{ "password": "123456" }
错误码 | 错误提示 | |
---|---|---|
修改成功 | 0 | success |
用户不存在 | 4 | user is not existed |
修改失败 | 4 | modify password error |
参数有空值 | 3 | prefix,user_name and password should not be empty |
参数不合法 | 3 | 会有具体json错误 |
密码加密失败 | 4 | password encrypt error |
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 | success |
用户不存在 | 4 | user is not exist |
用户删除失败 | 4 | delete error |
4. 测试
4.1 测试配置(以控制面配置 api_limit_except块测试为例):
为range 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 range 固定字符串前缀测试(用户名:njet 密码123456)
PUT 增加用户名密码测试 初始不存在njet用户以及密码123456 访问range api get接口,提示输入密码,输入njet/123456 , 校验不通过
通过auth 配置去配置用户名密码, njet/123456
再次访问range get 接口,输入 njet/123456, 成功验证通过
PATCH 修改密码测试
重新访问range get接口,使用 njet/12345 不通过
使用njet/654321, 验证通过
DELETE 删除密码测试 删除密码
再次访问range, 不通过
4.3 ssl 使用变量前缀测试(用户名:ssl 密码123456)
PUT 增加用户名密码测试 初始不存在ssl 用户以及密码123456 访问range ssl get接口,提示输入密码,输入ssl/123456 , 校验不通过
通过auth 配置去配置用户名密码, ssl/123456, 前缀使用www.test.com
再次访问ssl get 接口,输入 ssl/123456, 成功验证通过
PATCH 修改密码测试
重新访问ssl get接口,使用 ssl/12345 不通过
使用ssl/654321, 验证通过
DELETE 删除密码测试 删除密码
再次访问ssl, 不通过

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OpenAI 首席科学家 Ilya Sutskever 宣布离职
OpenAI 首席科学家 Ilya Sutskever 刚刚在社交媒体宣布已从 OpenAI 离职,同时附带了一张与 OpenAI 董事会成员、以及高层领导的合照。 近十年后,我做出了离开 OpenAI 的决定。公司的发展轨迹堪称奇迹,我相信 OpenAI 将在 @sama、@gdb、@miramurati 以及现在的 @merettm 的研究团队领导下,打造出既安全又有益的 AGI。 能与大家共事是我的荣幸,我会非常想念大家的。 再见了,感谢你们所做的一切。我对接下来的工作充满期待——这个项目对我个人意义非凡,我会在适当的时候与大家分享细节。 合照人物介绍(从左往右): OpenAI 研究团队 leader Jakub Pachocki OpenAI 总裁兼联合创始人Greg Brockman OpenAI 联合创始人兼首席科学家 Ilya Sutskever OpenAI CEO Sam Altman(OpenAI 董事会成员) OpenAI CTOMira Murati 去年 11 月 OpenAI 董事会发生大动荡后,许多员工纷纷在社交媒体表达了自己的态度,但 Ilya Sut...
- 下一篇
Advanced RAG 07:在RAG系统中进行表格数据处理的新思路
编者按: 目前,检索增强生成(RAG)系统成为了将海量知识赋能于大模型的关键技术之一。然而,如何高效地处理半结构化和非结构化数据,尤其是文档中的表格数据,仍然是RAG系统面临的一大难题。 本文作者针对这一痛点,提出了一种处理表格数据的新颖解决方案。作者首先系统性地梳理了RAG系统中表格处理的核心技术,包括表格解析、索引结构设计等,并评述了现有的一些开源解决方案。在此基础上,作者提出了自己的创新之处——利用Nougat工具准确高效地解析文档中的表格内容,使用语言模型对表格及其标题进行内容摘要,最后构建一种新型的document summary索引结构,并给出了完整的代码实现细节。 这种方法的优点是既能有效解析表格,又能全面考虑表格摘要与表格之间的关系,且无须使用多模态LLM,能够节省解析成本。让我们拭目以待该方案在实践中的进一步应用和发展。 作者 | Florian June 编译|岳扬 RAG系统的实现是一项极具挑战性的任务,特别是需要解析和理解非结构化文档中的表格时。而对于经过扫描操作数字化的文档(scanned documents)或图像格式的文档(documents in ima...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6