c# - webpack-dev-server 热重载代理 IIS Express with Windows authentication (NTLM Authentication)

标签 c# asp.net reactjs iis webpack-dev-server

我创建了一个新的 ASP.NET Web 应用程序 -> 使用 Windows 身份验证的 Web API 2 项目。这在 IIS Express 中运行良好,但为了让我的 React 前端热重载,我尝试使用 webpack-dev-server 并让它代理我的 IIS Express。我之前在使用 cookie 身份验证和 token (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,
    },
}

最佳答案

在查看了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

工作代码:

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,
    },
}

关于c# - webpack-dev-server 热重载代理 IIS Express with Windows authentication (NTLM Authentication),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47811015/

相关文章:

c# - 如何将 Div id 作为参数传递给 C# 函数?

c# - 当 GridView 为空时隐藏面板

javascript - react js模块未找到: Can't resolve 'file-saver'

reactjs - 样式化组件渲染触发元素类型错误

javascript - 如何使用 React 从 ajax 调用成功后重定向?

c# - 创建一个你可以在 RxCpp 中取消订阅的 Observable

c# - 如果我有字符串名称,则从代码中访问 xaml 元素

c# - 多对多 Entity Framework GetUsersInRole()

c# - 排序重定向到另一个页面

c# - 使用通过 .NET Core 和 Xamarin 从 IL 编译的程序集