使用Windows身份验证(NTLM身份验证)的webpack-dev-server热重装代理IIS Express

Ogg*_*las 1 c# asp.net iis reactjs webpack-dev-server

我已经ASP.NET Web Application使用Windows身份验证创建了一个新的-> Web API 2项目。这在IIS Express中可以正常工作,但是要为我的React前端进行热重载,我尝试使用webpack-dev-server它并使其代理IIS Express。我之前在Cookie身份验证和令牌(Bearer)身份验证中都使用了此功能,但没有问题,但在Windows身份验证(NTLM身份验证)中却无法使用。

查看来自服务器的响应,我得到了预期的401 Unauthorized (401.2)响应,其标题www-authenticate: Negotiate, NTLM与预期的一样,但是我不认为客户端使用来重新发送请求Authorization: NTLM

我尝试过的浏览器(Chrome,Firefox和IE)也无法正常提示我输入正确的凭据。

https://blogs.msdn.microsoft.com/chiranth/2013/09/20/ntlm-want-to-know-how-it-works/

我在webpack.config.js中的设置如下所示:

var proxy = 'localhost:57263';

devServer: {
    proxy: {
        '*': {
            target: 'http://' + proxy,
            changeOrigin: true,
        },
        port: 8080,
        host: '0.0.0.0',
        hot: true,
    },
}
Run Code Online (Sandbox Code Playgroud)

Ogg*_*las 5

在查看了文档之后,webpack-dev-server Proxy我看到它们使用了http-proxy-middleware

https://webpack.github.io/docs/webpack-dev-server.html#proxy

这导致我进入此线程并回答:

https://github.com/chimurai/http-proxy-middleware/issues/39#issuecomment-330911943

最终解决方案:

跑:

npm install agentkeepalive --save
Run Code Online (Sandbox Code Playgroud)

工作代码:

var proxy = 'localhost:57263';

devServer: {
    proxy: {
        '*': {
            target: 'http://' + proxy,
            changeOrigin: true,
            agent: new agent({
                maxSockets: 100,
                keepAlive: true,
                maxFreeSockets: 10,
                keepAliveMsecs: 100000,
                timeout: 6000000,
                keepAliveTimeout: 90000 // free socket keepalive for 90 seconds
            }),
            onProxyRes: (proxyRes) => {
                var key = 'www-authenticate';
                proxyRes.headers[key] = proxyRes.headers[key] && proxyRes.headers[key].split(',');
            },
        },
        port: 8080,
        host: '0.0.0.0',
        hot: true,
    },
}
Run Code Online (Sandbox Code Playgroud)