如何在nginx中设置自动身份验证层?

时间:2014-08-16 13:28:28

标签: authentication nginx

我在一个公共域下构建一个应用程序生态系统,每个应用程序都在一个单独的子域下。我已经为生态系统构建了一个身份验证应用程序,但它需要专门配置其他应用程序才能使用它。有没有办法配置nginx来管理用户会话,可能会将用户信息作为标题转发给各种应用程序?

2 个答案:

答案 0 :(得分:11)

让我向您展示可以与Nginx一起使用的跨应用程序身份验证的常见模式:

1)构建名为auth_service的独立服务,根据需要独立于Web应用程序工作

2)每个子域应用程序将具有代理相同身份验证服务的单独位置

location = /auth {
  proxy_pass http://auth_service.localhost/authenticate;
  proxy_pass_request_body off;
  proxy_set_header Content-Length "";
  proxy_set_header X-Original-URI $request_uri;
}

3)个人网络应用使用“/ auth”位置来传递登录/传递(基于POST数据,标题或临时标记)

4)独立服务的处理程序“/ authenticate”接受web apps登录/传递,如果失败则返回200或401

这种方法的根源是“/ auth”位置位于每个自己的基于子域的应用程序上, 服务器端调用单个认证端点的调用,可以有效地重复使用,避免代码重复。

默认情况下,此模块Auth Request不是构建的,而是附带源代码。在使用之前,只需使用--with-http_auth_request_module选项编译Nginx。

更新:自Nginx 1.5.4以来,这个插件是标准发行版,无需单独编译。

答案 1 :(得分:0)

我建议一个自定义模块,它根据登录的用户从数据库中获取数据,这样你就可以从中心点进行管理,并可以根据数据库中的任何内容设置你想要的任何内容,从另一方面你可以同步带有身份验证源的数据库。

客户端始终具有相同的登录界面,nginx始终以相同的方式与同一身份验证源通信,您只需要管理数据库及其与身份验证源的接口。

客户<> nginx<>数据库<>设置客户端进行和允许的值。