正文
Nginx 的 auth_request 模块 将请求转发给 ldap-auth 这个服务(对应 nginx-ldap-auth-daemon.py),首次肯定会给个 401 .
Nginx 将请求转发给 http:// backend / login,后者对应于这里的后端服务。它将原始请求的 uri 写入X-Target ,以便于后面跳转。
后端服务向客户端发送登录表单(表单在 demo 代码中定义)。根据 error_page 的配置,Nginx 将登录表单的 http 状态码返回 200。
用户填写表单上的用户名和密码字段并单击登录按钮,从向 / login 发起 POST 请求,Nginx 将其转发到后端的服务上。
后端服务把用户名密码以 base64 方式写入 cookie。
客户端重新发送其原始请求(来自步骤1),现在有 cookie 了 。Nginx 将请求转发给 ldap-auth 服务(如步骤2所示)。
ldap-auth 服务解码 cookie,然后做 LDAP 认证。
下一个操作取决于 LDAP 认证是否成功:
-
如果认证成功,则 ldap-auth 服务给 Nginx 返回状态码 200。Nginx 从后端服务中请求资源。在 demo 里,后端服务返回以下文本:
Hello, world! Requested URL: URL
-
如果认证失败,ldap-auth 服务会返回 401 。Nginx 再次将请求转发给后端服务的 Login(如步骤3),并重复该过程。
Demo 测试
Nginx 的配置文件如下,做了些精简,加了中文注释。
然后分别执行 ./nginx-ldap-auth-daemon.py 和 ./backend-sample-app.py 即可。
访问 Nginx 的 8081 端口,可以看到他能够重定向到 backend 上去做认证了。
日志