跳转到主要内容

验证nginx请求与SQL数据库

项目描述

https://travis-ci.org/wosc/nginx-db-auth.png

此包通过在数据库(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-pythonpsycopg2等)。

sqlalchemy.开头的设置将被移除该前缀,并通过sqlalchemy.create_engine()传递。

查询将作为SQL参数传递基本的认证usernamepassword以及任何请求头(小写,并将-替换为_)。(如果这不足以满足您的用例,您将不得不运行具有专用查询的单独实例,暂时如此)。

查询必须返回用户的哈希密码。由于对于简单情况,您可能可以使用数据库提供的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 (6.8 kB 查看哈希)

上传时间

构建分布

ws.nginxdbauth-1.1.1-py3-none-any.whl (7.3 kB 查看哈希)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面