angular cli + windows身份验证后端

时间:2017-03-23 16:17:18

标签: angular windows-authentication

我创建了一个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身份验证?

3 个答案:

答案 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