Identity Server 4-已配置允许的起源,并且不允许起源

时间:2018-07-13 13:23:25

标签: c# .net-core identityserver4

我在同一项目中有一个SPA和API,当我向该API提出请求时,不断出现以下错误。

AllowedOrigins configured and origin http://localhost:5000 is not allowed
CorsPolicyService did not allow origin: http://localhost:5000

api的路径为:http://localhost:5000。我确保已在ClientCorsOrigins表中为客户端指定了来源,并且还在Startup.cs中添加了策略:

services.AddCors(options =>
            {
                options.AddPolicy("default", policy =>
                {
                    policy.WithOrigins("http://localhost:5000")
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                });
            });

我已经多次检查了文档和配置,当在ClientCorsOrigins表中指定了来源时,我不知道为什么会出现此问题。我正在使用Google Chrome。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您需要使用ClientId和Origin将行/记录添加到[dbo]。[ClientCorsOrigin]表中。

CorsPolicyProvider.cs在#62行中有一个检入:

if (await corsPolicyService.IsOriginAllowedAsync(origin))

当它返回 false 时,在第http://localhost:5000行中显示“ CorsPolicyService不允许来源:#69 ”消息。

我假设您正在使用IdentityServer4.EntityFramework。这是位于IdentityServer4.EntityFramework.Services命名空间中的CorsPolicyService.cs中的IsOriginAllowedAsync方法:

    /// <summary>
    /// Determines whether origin is allowed.
    /// </summary>
    /// <param name="origin">The origin.</param>
    /// <returns></returns>
    public Task<bool> IsOriginAllowedAsync(string origin)
    {
        // doing this here and not in the ctor because: https://github.com/aspnet/CORS/issues/105
        var dbContext = _context.HttpContext.RequestServices.GetRequiredService<IConfigurationDbContext>();

        var origins = dbContext.Clients.SelectMany(x => x.AllowedCorsOrigins.Select(y => y.Origin)).ToList();

        var distinctOrigins = origins.Where(x => x != null).Distinct();

        var isAllowed = distinctOrigins.Contains(origin, StringComparer.OrdinalIgnoreCase);

        _logger.LogDebug("Origin {origin} is allowed: {originAllowed}", origin, isAllowed);

        return Task.FromResult(isAllowed);
    }

查看isAllowed,其中填充了AllowedCrossOrigins集合中的数据,该数据的内容存储在[dbo]。[ClientCorsOrigin]表中。

因此,请仔细检查ClientCorsOrigin表中的内容。