我创建了一个Angular CLI项目,其中包含对包含web api服务的后端项目的代理引用。
launchSettings.json(后端项目):
...
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:10863/",
"sslPort": 0
}
},
...
proxy.conf.json(前端项目):
{
"/api": {
"target": "http://localhost:10863",
"secure": false,
"logLevel": "debug"
}
}
package.json(前端项目):
...
"scripts": {
"ng": "ng",
"start": "start http://localhost:4200 && ng serve --proxy-config proxy.conf.json",
"build": "ng build --prod --output-path=..\\CoreTest\\wwwroot",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
...
然后我启动后端并运行npm start
启动Kestrel网络服务器。使用angular2服务,我会对其中一个后端服务进行http-get。由于后端服务在带有Windows身份验证的IISExpress中运行
(我想要Windows身份验证),我收到401错误。
我可以npm run build
浏览我的IISExpress网址并加载由ng build发布的index.html但是我想使用ng服务方法,因为开发更顺畅,因为ng服务在内存中工作
我的问题是:如何在开发过程中使用Angular CLI和Windows身份验证?
答案 0 :(得分:4)
对于它的价值,更好的解决方案是使用代理js文件https://github.com/angular/angular-cli/issues/5627#issuecomment-289381319
答案 1 :(得分:1)
我在这里找到了一个黑客:
http://www.meekdeveloper.com/angular-cli-asp-net-core-windows-authentication/
有用。我的后端项目现在可以使用User.Identity.Name
正确识别主叫用户。
这真的是一个黑客,如果Angular CLI可以正式支持这个会很好!
答案 2 :(得分:0)
希望这会有所帮助。
使用以下内容创建文件proxy.conf.json(将目标URL替换为后端的URL):
{
"/api": {
"target": "http://localhost:20938",
"secure": false
}
}
使用以下内容创建文件proxy.conf.js(用目标URL替换目标URL):
const Agent = require("agentkeepalive");
module.exports = {
'/api': {
target: "http://localhost:20938",
secure: false,
agent: new Agent({
maxSockets: 100,
keepAlive: true,
maxFreeSockets: 10,
keepAliveMsecs: 100000,
timeout: 6000000,
keepAliveTimeout: 90000
}),
onProxyRes: proxyRes => {
const key = "www-authenticate";
proxyRes.headers[key] = proxyRes.headers[key] &&
proxyRes.headers[key].split(",");
}
}
};
将此行放入package.json文件的“脚本”部分中:
"start": "ng serve --proxy-config proxy.conf.json --o --port 4200"
运行npm start
。