验证nginx请求与SQL数据库
项目描述
此包通过在数据库(mysql、postgresql等sqlalchemy支持的所有数据库)中查找用户/密码来响应nginx认证子请求。
用法
配置数据库访问
您需要通过配置文件提供DSN和查询
[default] dsn = postgresql://127.0.0.1/myusers query = SELECT password FROM users WHERE username = :username AND role = :x_required_role password_hash = bcrypt
有关支持的DSN,请参阅sqlalchemy文档。请注意,您必须自行安装相应的驱动python包(mysql-python、psycopg2等)。
以sqlalchemy.开头的设置将被移除该前缀,并通过sqlalchemy.create_engine()传递。
查询将作为SQL参数传递基本的认证username和password以及任何请求头(小写,并将-替换为_)。(如果这不足以满足您的用例,您将不得不运行具有专用查询的单独实例,暂时如此)。
查询必须返回用户的哈希密码。由于对于简单情况,您可能可以使用数据库提供的SQL函数来哈希密码(例如,mysql WHERE password=encrypt(:password, password)),但您也可以指定由passlib支持的任何哈希作为password_hash以在Python中执行比较(这就是为什么我们需要从数据库中存储的密码哈希)。您需要pip install passlib来使用此功能。
设置HTTP服务
然后您需要设置一个HTTP服务器,可以是专用进程
$ nginx-db-auth-serve --host localhost --port 8899 --config /path/to/config
或者作为CGI脚本,如果您已经设置了该基础设施。以下是一个配置nginx的示例
ScriptAlias /nginx-auth /path/to/nginxdbauth/nginx-db-auth-cgi <Location /nginx-auth> SetEnv NGINXDBAUTH_CONFIG /path/to/config CGIPassAuth On # apache >= 2.4.13 # SetEnv NGINXDBAUTH_LOGFILE /path/to/log # optional, for debugging </Location>
配置nginx
现在您可以设置一个受保护的nginx位置,如下所示
location /private/ { auth_request /auth; # ... define rest of location ... } location = /auth { proxy_pass https://127.0.0.1:8899; # or http://mycgi/nginx-auth proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Required-Role "superuser"; proxy_set_header WWW-Authenticate "Basic realm=\"my realm\""; }
nginx发送的WWW-Authenticate头部将简单地回显在401请求中(因为我所知,nginx不提供在auth_request情况下设置realm字符串的其他方法)。
变更
1.1.1 (2024-06-10)
变更
绕过passlib/bcrypt错误(passlib)
1.1.0 (2023-03-19)
变更
使sqlalchemy选项可配置(dbconfig)
在启动时连接一次数据库,而不是每次请求都连接(dbconnect)
停止对Python-2的支持(py2)
1.0.4 (2023-02-07)
更新到sqlalchemy-2
1.0.3 (2022-05-04)
修复passlib导入错误
1.0.2 (2018-03-28)
回显401响应的WWW-Authenticate头部。
1.0.1 (2018-03-28)
启用将错误记录到文件中,以便调试CGI脚本。
1.0.0 (2018-03-27)
首个版本。
项目详情
ws.nginxdbauth-1.1.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 72a160434099bd7876d5be7ebbad287e854536cc86b9fb0f22a38a9e7fa7adf7 |
|
MD5 | e4df8373dcd0bd35b7ce2d42edc9a4e8 |
|
BLAKE2b-256 | 2c8170c314601984b9c3b6ea35c689d73ea7695fdd666b3d6cd8e4981838642a |
ws.nginxdbauth-1.1.1-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 44f404b056b2e155cc56b6e53acc2095d3592db3509233d97b3351a8e11b71e8 |
|
MD5 | 7397394635bdded9c4ca39dbd76d160d |
|
BLAKE2b-256 | 41b121735ea49b17f7e41859bc1d14bc773b6cdf28061e91b838dcb2020563d7 |