Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 如何在nginx中设置自动身份验证层?_Authentication_Nginx - Fatal编程技术网

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

Authentication 如何在nginx中设置自动身份验证层?,authentication,nginx,Authentication,Nginx,我正在一个公共域下构建一个应用程序生态系统,每个应用程序都在一个单独的子域下。我已经为生态系统构建了一个身份验证应用程序,但它需要对每个应用程序进行特殊配置才能使用它。有没有办法配置nginx来管理用户会话,可能会将用户信息作为标题转发到各种应用程序?我建议使用一个自定义模块,根据登录者从数据库获取数据,这样您就可以从中心点进行管理,并可以根据数据库中的内容设置您想要的内容,从另一端,您可以将数据库与身份验证源同步 客户端总是有相同的登录接口,nginx总是以相同的方式与相同的身份验证源通信,您

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

我建议使用一个自定义模块,根据登录者从数据库获取数据,这样您就可以从中心点进行管理,并可以根据数据库中的内容设置您想要的内容,从另一端,您可以将数据库与身份验证源同步

客户端总是有相同的登录接口,nginx总是以相同的方式与相同的身份验证源通信,您只需要管理数据库及其与身份验证源的接口


客户端nginx数据库设置客户端要去的地方和允许做的事情的值。

让我向您展示一种可用于nginx的跨应用程序身份验证的通用模式:

1) 构建名为auth_服务的独立服务,根据需要独立于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) 单个web应用使用“/auth”位置传递登录/传递(基于帖子数据、标题或临时令牌)

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

这种方法的根源是“/auth”位置位于每个基于子域的应用程序上, 服务器端将调用分派到单个身份验证端点,这样可以有效地重复使用,并且可以避免代码重复

默认情况下,此模块不是构建的,但附带源代码。在使用之前,只需使用--with-http\u auth\u request\u模块选项编译Nginx


更新:由于Nginx 1.5.4,该插件采用标准发行版,无需单独编译。

Cookies是(子)域特定的,不会转移到其他子(域)。也许您的问题是关于在内部服务之间进行访问?我将在各种子域下提供一系列面向客户的应用程序,这些应用程序可能使用各种服务器端语言编写。目前,我已经设置了一个OAuth2提供程序来管理身份验证,但是在每个新的应用程序中实现该提供程序的客户端部分非常繁琐,特别是在我想扔掉一些静态文件,但仍然需要保护它们的情况下。你有机会回顾一下下面的答案吗?这可能足够满足我的需要了。因为它将代理现有的身份验证应用程序,所以它似乎适用于几乎任何应用程序。由于每个应用程序仍然必须单独管理其会话,这并不一定是理想的,但现在看来,管理会话的唯一方法是编写一个新的nginx模块,该模块能够进行自己的会话管理。