我正在构建一个公共域下的应用程序生态系统,每个应用程序都位于一个单独的子域下。我已经为生态系统构建了一个身份验证应用程序,但它需要对彼此的应用程序进行特殊配置以使用它。是否有一种方法可以配置nginx来管理用户会话,可能会将用户信息作为头转发给不同的应用程序?
发布于 2014-08-24 16:42:32
让我向您展示一个用于跨应用程序身份验证的通用模式,您可以在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)单个web应用程序使用"/auth“位置通过登录/传递(基于POST数据、标头或临时令牌)
4)独立服务的处理程序"/authenticate“接受web应用程序登录/传递,如果失败,返回200或401
这种方法的根源是"/auth“位置位于每个基于子域的应用程序上,服务器端将调用分派到单个身份验证端点,这样可以有效地重用,并且可以避免代码重复。
默认情况下,此模块八月请求不是生成的,而是附带源代码的。在使用之前,只需编译带有--带有-http_auth_request模块选项的Nginx。
更新:由于Nginx1.5.4这个插件是在标准发行版中提供的,不需要单独编译它。
发布于 2014-08-21 09:37:30
我建议使用一个自定义模块,它根据登录的用户从数据库中获取数据,这样您就可以从中心点管理数据,并且可以根据数据库中的任何内容设置您想要的任何数据,从另一边将数据库与身份验证源同步。
客户端总是具有相同的登录接口,nginx总是以相同的方式与相同的身份验证源通信,您只需要管理数据库及其与身份验证源的接口。
client <> nginx <>数据库<>设置客户端要去和允许做的值。
https://stackoverflow.com/questions/25340630
复制相似问题