You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过反向代理将NTLM认证用户信息传递至Next.js/Express.js

可行实现方案及技术选型

方案一:反向代理传递认证请求头

IIS配置步骤

  1. 在IIS站点启用Windows身份验证(NTLM/SSPI),完成前端用户认证。
  2. 安装ARR(Application Request Routing)模块,配置反向代理规则,将请求转发到Next.js/Express.js的服务端口。
  3. 添加IIS出站规则:创建自定义HTTP请求头(如X-Authenticated-User),将IIS内置变量{REMOTE_USER}的值写入该头,传递已认证的用户名。
  4. 后端读取逻辑:
    • Express.js:通过req.headers['x-authenticated-user']获取用户名
    • Next.js:在API路由或getServerSideProps中读取req.headers['x-authenticated-user']

Nginx配置步骤

  1. 配置Nginx集成Windows域认证(可借助nginx-auth-ldap模块对接AD,或使用第三方认证组件完成NTLM/SSPI认证)。
  2. 在反向代理配置中添加:
    proxy_set_header X-Authenticated-User $remote_user;
    
  3. 后端读取逻辑同IIS方案。

方案二:Node.js直接处理NTLM/SSPI认证

无需依赖反向代理,直接在Node.js层完成认证:

  • 适用npm包:express-ntlm、sspi(原生SSPI绑定)
  • Express.js示例代码:
    const express = require('express');
    const ntlm = require('express-ntlm');
    const app = express();
    
    app.use(ntlm({
      domain: '你的域名称',
      domaincontroller: 'ldap://你的域控制器地址',
    }));
    
    app.get('/', (req, res) => {
      res.send(`已认证用户:${req.ntlm.UserName},域:${req.ntlm.DomainName}`);
    });
    
    app.listen(3000);
    
  • 注意:需确保Node.js服务器部署在域环境内,客户端可直接发起NTLM协商请求。

方案三:Kerberos认证集成

若域环境支持Kerberos,可采用更高效的Kerberos认证方案:

  1. 反向代理(IIS/Nginx)完成Kerberos认证后,通过自定义请求头(如X-Forwarded-User)传递用户名。
  2. Node.js端可选使用kerberos包对票据进行二次校验,或直接读取请求头信息。
  • 优势:相比NTLM性能更优,跨域场景支持更好。

方案四:SPNEGO票据传递

利用SPNEGO封装NTLM/Kerberos认证流程:

  1. 在反向代理(如IIS)启用SPNEGO认证,完成用户身份校验。
  2. 配置反向代理将SPNEGO票据通过自定义请求头(如X-Auth-Token)传递到Node.js后端。
  3. Node.js使用spnego包解析票据,提取用户信息。

内容的提问来源于stack exchange,提问作者Rune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:27:38