首页 > 解决方案 > .NET Core 2 IdentityServer 4 Cors 仅在本地主机上工作

问题描述

正如标题所示,当我将 API 部署到服务器 (IIS 7.5) 时,我收到了 Cors 错误。

我有一个用于隐式流身份验证的 IdentityServer 4 示例的略微修改版本 - https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/3_ImplicitFlowAuthentication/src

一切都按预期在本地运行;我收到一个访问令牌,并且能够调用一个安全的 API 端点。但是,当我将 API 部署到我的 IIS 7.5 服务器(但不是身份服务器或 JS 客户端)时,我收到了典型的 CORS 源问题。

一般设置是

身份服务器: http://localhost:5001

JS 客户端: http://localhost:5003/

API: http://api.on.the.internet(或本地http://localhost:5001

除了初始样本之外,我的启动几乎没有修改:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvcCore()
            .AddAuthorization()
            .AddJsonFormatters();

        services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = MyHelper.AuthorityUrl; // identity server url
                options.RequireHttpsMetadata = false;

                options.ApiName = "api1";
            });

        services.AddCors(options =>
        {
            options.AddPolicy("default",
                builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
        });

    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseCors("default");
        app.UseAuthentication();
        app.UseMvc();
    }

还有我的控制器——

[EnableCors("default")]
[Route("[controller]")]
[Authorize]
public class UserController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        etc...
    }
}

我已经非常详尽地搜索过,似乎没有其他人发布过这个问题。所以我想我会伸出援手,看看是否有人对这个问题有任何高水平的建议或解决方案。还有其他人反对这个问题吗?

非常感谢!

-马克

标签: c#.net-core

解决方案


确保您的飞行前请求包含适当的访问控制标头。例如:

Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,cache-control,content-type,pragma

特别注意Access-Control-Request-Headers。您可以在 chrome dev-tools 网络选项卡上快速检查这一点并选择失败的请求。

在此处输入图像描述


推荐阅读