.NET Core 2 IdentityServer 4 Cors仅适用于localhost

时间:2018-04-27 17:13:42

标签: c# .net-core

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

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

一切按预期在本地运行;我收到一个访问令牌,我可以调用一个安全的API端点。但是,当我将API部署到我的IIS 7.5服务器(但不是Identity Server或JS客户端)时,我收到典型的CORS原因问题。

一般设置是

IdentitServer: 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...
    }
}

我搜索得非常详尽,而且似乎没有其他人发布此问题。所以我想我会伸出援手,看看是否有人对此问题有任何高层建议或解决方案。其他人遇到这个问题?

非常感谢!

-Marc

1 个答案:

答案 0 :(得分:0)

确保您的航班前请求包含相应的Access-Control标头。例如:

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

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

enter image description here