在不同端口上运行 localhost 调用 dotnet 应用程序的 Angular 应用程序在降级时获得无推荐人。由于 withCredentials?
Posted
技术标签:
【中文标题】在不同端口上运行 localhost 调用 dotnet 应用程序的 Angular 应用程序在降级时获得无推荐人。由于 withCredentials?【英文标题】:Angular app running localhost calling dotnet app on different port gets no-referrer-when-downgrade. Due to withCredentials? 【发布时间】:2020-07-24 19:16:13 【问题描述】:我使用 Angular CLI 设置了一个新的 Angular 应用程序,它在 http://localhost:4200 上运行 我将使用运行在http://localhost:5000 上的 dotnet core 开发的 web 服务称为
我允许 CORS 用于 localhost 设置。我确信它在过去有效,但现在我得到了一个
no-referrer-when-downgrade
chrome 中的错误消息。
它在某种程度上与withCredentials: true
有关
如果我输入 false 那么它工作正常。
如何将 http 调用的凭据传递到同一 localhost 域上的不同端口?
【问题讨论】:
这将有助于找出导致此错误的特定请求以及客户端和服务器的协议(http、https)是什么。 它只是在本地主机上我的本地开发机器客户端是localhost:4200,服务器运行在localhost:5000 我曾经在以前的应用程序中使用过WithCredentials:true,所以我在这里也使用它并遇到了描述的问题。该请求只是一个 httpClient.get (但我想 .post 也会发生同样的情况) 【参考方案1】:您可以尝试将 .NET Core 应用程序升级到 HTTPS。
no-referrer-when-downgrade
消息表明默认引荐来源网址策略已到位,如 here 所述。
降级时无推荐人(默认)
如果没有指定策略,或者如果 提供的值无效。的来源、路径和查询字符串 当协议安全级别保持在 相同(HTTP→HTTP,HTTPS→HTTPS)或改进(HTTP→HTTPS),但不发送 到不太安全的目的地(HTTPS→HTTP)。
只是为了测试,您可能会尝试将开发环境的引用策略设置为不同的值(此代码使用 NWebsec.AspNetCore.Middleware):
if (env.IsDevelopment())
app.UseReferrerPolicy(opts => opts.UnsafeUrl());
【讨论】:
谢谢,我测试了您的解决方案,这给了我很多见解。但到头来却是死路一条。我只是走错了路。对不起。 NWebsec.AspNetCore.Middleware 非常酷。谢谢! 很高兴您找到了解决方案。【参考方案2】:事实证明,降级时不是 no-referrer-when-downgrade 问题,而是 CORS 问题。 我错过了 CORS 政策中的 AllowCredentials()
public void ConfigureServices(IServiceCollection services)
// add cors
services.AddCors(options =>
options.AddPolicy(name: "MyCorsPolicy",
builder => builder.SetIsOriginAllowed(s => s.Contains("localhost"))
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
);
【讨论】:
以上是关于在不同端口上运行 localhost 调用 dotnet 应用程序的 Angular 应用程序在降级时获得无推荐人。由于 withCredentials?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不同端口后面的单个 Tomcat 实例上运行不同的应用程序?
从运行在不同端口的 Vue 应用程序调用 node express 服务器 API