由于dotnet核心的身份验证问题,Angular 8差分加载失败

时间:2019-06-26 16:11:41

标签: authentication .net-core angular8

我最近使用ng update从Angular 7更新到Angular 8。遵循预期的迁移路径,没有问题后,我进行了构建和部署。一切工作都很好,直到我开始检查其他浏览器版本,并意识到其中一些正在从服务器获取401 unauthorized来请求js文件。

问题是,差分加载是这样完成的:

<script src="main-es2015.1234.js" type="module"></script>

似乎某些浏览器有时不想传递<script type="module" ...的身份验证信息。令我惊讶的是,有几种方法可以解决此问题:

  • 我可以通过在脚本标签中添加crossorigin="use-credentials"来解决此问题,但是我无法在ng build中找到如何做的方法。
  • 我可以调整auth设置,以某种方式允许匿名请求通过我的JS文件,但是我没有找到没有很多复杂性的dotnet核心方法。现在,整个应用仅允许Windows身份验证。如果我允许匿名用户,则不必担心我将控制器保持打开状态。

我认为以前的选择是更清洁的解决方案,但我愿意接受其他选择。

2 个答案:

答案 0 :(得分:0)

我修改了angular.json,并在项目->主->架构师->构建->选项下使用了明确的deployUrl

         "deployUrl": "/ClientApp/dist/",

这会更改脚本标签:

<script src="/ClientApp/dist/main-es2015.1234.js" type="module">

因此,它不再通过dotnet核心应用程序来提取js文件。然后在IIS中,将该文件夹设置为允许匿名。

答案 1 :(得分:0)

自发布可接受的答案以来,已将Angle CLI选项中添加了通过McAden建议的通过添加crossorigin =“ use-credentials”的第一种方式处理此问题的选项。

Original feature request

Angular CLI documentation

在您的angular.json中添加

{
   ...,
   "build": {
     "builder": ...,
     "options": {
        ...
        "crossOrigin": "use-credentials"
     }
   }
}