在不同端口上运行 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

NGINX - 在不同端口上反向代理多个 API

如何在不同端口后面的单个 JBoss AS 6 实例上运行不同的应用程序?

Cookie 未与 Ajax 调用一起存储

WAMP 中不同端口上的多个虚拟主机