1.飞网Nginx网络认证扩展连接器

    这是一个使用飞网身份验证和 NGINX 作为反向代理的工具。它可以帮助已经在内部的NGINX服务器上托管大量服务的用户并将这些服务地址指向NGINX服务器的飞网IP,然后无缝使用飞网进行无密码身份验证。通过该“连接器”访问Nginx代理的业务系统时,用户无需登录即可访问授权页面(即:无密码身份验证);如果应用系统需要对不同访问用户提供个性化的展示内容时,可以直接提取请求HTTP报文头中相应字段获取用户标识,无需关心上下文,无需使用Seesion,Cookie或JWT等,该用户标识通过网络层飞网连接器安全赋值,用户无法覆盖或篡改。

    仅需简单的配置,无需二次开发,即可实现下面的效果:

1.1 未通过“连接器”允许的网络访问Nginx提示“需要授权”

1.2 通过“连接器”允许的网络访问Nginx可以正常访问,并获取到用户的身份信息

    注:这里仅是Nginx代理应用的一个示例,该示例仅将请求的HTTP报文头直接返回给浏览器。您可以看到请求HTTP报文头中的用户标识信息。您可以基于此开发或改造现有的应用系统,以最小化的开发成本为您的应用附带网络层的安全保障。

Header示例值描述
X-Webauth-Gmztaloginllbef1连接此设备的登录名称
X-Webauth-Gmztanamell连接此设备的设备名
X-Webauth-Gmztanetllbef1.weixin.gmzta.com连接此设备的网络名称
X-Webauth-Gmztauserllbef1连接此设备的飞网用户名(可能由user@host组成)

2.下载、安装“飞网Nginx网络认证扩展连接器”

注:需要在安装飞网后使用

    根据您的操作系统类型和CPU架构选择并安装飞网Nginx网络认证扩展连接程序文件:

wget -N https://pkgs.gmzta.com/deb/gmzta-nginx-connector-amd64.deb
sudo apt install ./gmzta-nginx-connector-amd64.deb
wget -N https://pkgs.gmzta.com/rpm/gmzta-nginx-connector-amd64.rpm
sudo yum install ./gmzta-nginx-connector-amd64.rpm

3.配置Nginx,开启无密码身份验证

注:若未安装Nginx,请自行安装Nginx。

3.1 修改nginx配置文件

vi /etc/nginx/nginx.conf
    location /auth {
        internal;  # 内部定位,只能被Nginx内部请求访问
        proxy_pass http://unix:/run/gmzta.nginx-connector.sock;  # 代理到飞网Nginx网络认证扩展连接器
        proxy_pass_request_body off;     # 关闭请求主体的代理

        # 设置代理请求头,传递一些关键信息给认证服务器
        proxy_set_header Host $http_host;
        proxy_set_header Remote-Addr $remote_addr;
        proxy_set_header Remote-Port $remote_port;
        proxy_set_header Original-URI $request_uri;
    }
    location / {
        satisfy any;  # 允许任何满足下面条件的请求通过
        allow 172.19.0.0/16;  # 允许指定IP范围的请求通过 可选
        deny all; # 其他请求拒绝访问

        auth_request /auth;  # 使用认证请求/auth进行身份验证
        # 使用认证请求/auth进行身份验证
        auth_request_set $auth_user $upstream_http_gmzta_user;
        auth_request_set $auth_name $upstream_http_gmzta_name;
        auth_request_set $auth_login $upstream_http_gmzta_login;
        auth_request_set $auth_gmztanet $upstream_http_gmzta_gmztanet;
        auth_request_set $auth_profile_picture $upstream_http_gmzta_profile_picture;
        # 将认证信息设置为HTTP头,以便应用系统使用
        proxy_set_header X-Webauth-GmztaUser "$auth_user";
        proxy_set_header X-Webauth-GmztaName "$auth_name";
        proxy_set_header X-Webauth-GmztaLogin "$auth_login";
        proxy_set_header X-Webauth-GmztaNet "$auth_gmztanet";
        proxy_set_header X-Webauth-Gmzta-Profile-Picture "$auth_profile_picture";

        proxy_pass http://localhost:3002;  # 代理到本地应用系统
    }
  • 上述配置使用了Nginx的一个特性:基于子请求结果的身份认证。Nginx和Nginx Plus可以通过外部服务器或外部服务对网站的每个请求进行身份验证。为了执行身份验证,NGINX向外部服务器发出一个HTTP子请求,并在那里对该子请求进行身份验证。如果子请求返回一个2xx响应代码,表示身份验证成功则允许继续访问;如果子请求返回401或者403,表示身份验证失败则拒绝访问。这种类型的身份验证可以实现各种身份验证方案,例如多因素身份验证,或者实现LDAP或OAuth身份验证。

  • 更多资料访问:https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-subrequest-authentication/

3.2 重启nginx

nginx -s reload

3.3 开启gmzta-nginx-connector

// 开启服务
systemctl start gmzta.nginx-connector.socket
systemctl start gmzta.nginx-connector.service

// 配置开机自启
systemctl enable gmzta.nginx-connector.socket
systemctl enable gmzta.nginx-connector.service
  • gmzta.nginx-connector使用systemd套接字激活(socket activation),systemd套接字激活可以使服务按需启动,好处是可以节约资源,提高可靠性,且对客户端透明,在不丢失连接的情况下支持自动重启。
  • 完成上述操作即可快速开启“飞网Nginx网络认证扩展连接器”。
  • 具体效果请参考:“提取网络层身份信息”open in new window
上次更新: