Angular 由于 dotnet 核心的身份验证问题,8 个差异加载失败
Angular 8 differential loading failing due to auth issues with dotnet core
我最近使用 ng update
从 Angular 7 更新到 Angular 8。在遵循预期的迁移路径而没有出现任何问题后,我构建并部署了它。一切都很好,直到我开始检查其他浏览器版本并意识到有些浏览器在请求 js 文件时从服务器获取 401 unauthorized
。
问题是,差异加载是这样完成的:
<script src="main-es2015.1234.js" type="module"></script>
似乎某些浏览器有时不想传递 <script type="module" ...
的身份验证信息。令我印象深刻的是,有几种方法可以解决这个问题:
- 我可以通过将
crossorigin="use-credentials"
添加到脚本标签来解决这个问题,但我无法在 ng build
. 中找到如何做到这一点
- 我可以调整身份验证设置以某种方式允许匿名请求通过我的 JS 文件,但我一直无法找到执行此操作的 dotnet 核心方法而不需要很多复杂性。现在整个应用程序只允许 windows 身份验证。如果我允许匿名,我不想担心我已经打开了控制器。
我认为前一种选择是更清洁的解决方案,但我愿意接受其他选择。
我修改了 angular.json
并在项目 -> 主要 -> 架构师 -> 构建 -> 选项下使用了显式 deployUrl
:
"deployUrl": "/ClientApp/dist/",
这改变了脚本标签:
<script src="/ClientApp/dist/main-es2015.1234.js" type="module">
所以不再通过dotnet core应用拉取js文件。然后在 IIS 中我将该文件夹设置为允许匿名。
自从发布已接受的答案后,McAden 建议通过添加 crossorigin="use-credentials" 的第一种方式处理此问题的选项已添加到 Angular CLI 选项中。
在你的 angular.json 添加
{
...,
"build": {
"builder": ...,
"options": {
...
"crossOrigin": "use-credentials"
}
}
}
我最近使用 ng update
从 Angular 7 更新到 Angular 8。在遵循预期的迁移路径而没有出现任何问题后,我构建并部署了它。一切都很好,直到我开始检查其他浏览器版本并意识到有些浏览器在请求 js 文件时从服务器获取 401 unauthorized
。
问题是,差异加载是这样完成的:
<script src="main-es2015.1234.js" type="module"></script>
似乎某些浏览器有时不想传递 <script type="module" ...
的身份验证信息。令我印象深刻的是,有几种方法可以解决这个问题:
- 我可以通过将
crossorigin="use-credentials"
添加到脚本标签来解决这个问题,但我无法在ng build
. 中找到如何做到这一点
- 我可以调整身份验证设置以某种方式允许匿名请求通过我的 JS 文件,但我一直无法找到执行此操作的 dotnet 核心方法而不需要很多复杂性。现在整个应用程序只允许 windows 身份验证。如果我允许匿名,我不想担心我已经打开了控制器。
我认为前一种选择是更清洁的解决方案,但我愿意接受其他选择。
我修改了 angular.json
并在项目 -> 主要 -> 架构师 -> 构建 -> 选项下使用了显式 deployUrl
:
"deployUrl": "/ClientApp/dist/",
这改变了脚本标签:
<script src="/ClientApp/dist/main-es2015.1234.js" type="module">
所以不再通过dotnet core应用拉取js文件。然后在 IIS 中我将该文件夹设置为允许匿名。
自从发布已接受的答案后,McAden 建议通过添加 crossorigin="use-credentials" 的第一种方式处理此问题的选项已添加到 Angular CLI 选项中。
在你的 angular.json 添加
{
...,
"build": {
"builder": ...,
"options": {
...
"crossOrigin": "use-credentials"
}
}
}