【问题标题】:Asp.Net Core CORS and SSLAsp.Net Core CORS 和 SSL
【发布时间】:2019-10-16 07:02:03
【问题描述】:

我的情况是我的前端是用 reactjs 构建的,而我的后端是用 asp.net core 2.2 构建的

-前端:https://example.com/sub-directory - 带有有效证书

-后端:https://198.38.x.x:5001 -windows 服务器没有有效证书

如果我的前端需要 SSL 我总是遇到网络错误,我该如何与后端通信?

Startup.cs

services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    builder
                    .WithOrigins("https://example.gov.ph", "http://example.gov.ph")
                    .AllowCredentials()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
                });
            });

app.UseCors(MyAllowSpecificOrigins);

config.json 我的前端代码

{
  "apiUrl": "https://198.38.x.x:5001/api",
  "url": "https://198.38.x.x:5001",
  "profilePictureUrl": "https://198.38.x.x:5001/Public/Employees/Photos",
  "selectOptionLimit": 10,
  "fileSizeLimit": 10,
  "pageSize": 20,
  "gridSize": { "col": 4, "row": 3 }
}

【问题讨论】:

    标签: reactjs http asp.net-core https


    【解决方案1】:

    当浏览器使用 XHR 进行跨域调用时,它们会请求 CORS 标头来决定目标服务器是否允许访问 源域。

      public void ConfigureServices(IServiceCollection services)
        {
            // ...
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.WithOrigins("https://example.com/sub-directory")
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });
    
            services.AddMvc();
            // ...
    
        }
        public void Configure(IApplicationBuilder app)
        {
            // ...
            app.UseCors("CorsPolicy");
            // ...
        }
    

    【讨论】:

    • 已包含在我的代码中。我认为我的问题在于 SSL 认证
    • 你能用 AllowAnyOrigin 替换 WithOrigins 吗?测试?然后再试一次。
    • 我在相同的结果之前尝试过,并且在 2.1 中使用 AllowAnyOrigin 存在错误
    【解决方案2】:

    您应该可以将其添加到您的 Startup 类配置中

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    builder.WithOrigins("https://example.com/sub-directory");
                });
            });
    
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
    
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
    
            app.UseCors(MyAllowSpecificOrigins); 
    
            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
    

    【讨论】:

    • 你应该提到你所尝试的。你得到什么错误?
    • 跨源请求被阻止:同源策略不允许读取198.38.x.x:5001/api/Users/Login 的远程资源。 (原因:CORS 请求未成功)。和 net::ERR_CERT_AUTHORITY_INVALID
    • 但是当我在后端使用 chrome 在 198.38.x.x:5001 中继续不安全时,它将按预期工作。
    猜你喜欢
    • 2019-08-22
    • 2016-05-02
    • 2019-10-17
    • 1970-01-01
    • 2019-06-15
    • 2020-03-17
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多