I have a SPA and API in the same project and I keep getting the following errors when I make a request to the API.
AllowedOrigins configured and origin http://localhost:5000 is not allowed
CorsPolicyService did not allow origin: http://localhost:5000
The path to the api is: http://localhost:5000
. I made sure I have the origin specified in the ClientCorsOrigins
table for the client and I also added a policy in my Startup.cs
:
services.AddCors(options =>
{
options.AddPolicy("default", policy =>
{
policy.WithOrigins("http://localhost:5000")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
I've checked the docs and configuration multiple times and I can't figure out why I'm having this issue when I have the origin specified in the ClientCorsOrigins table. I'm using Google Chrome.
You need to add a row/record into [dbo].[ClientCorsOrigin] table with your ClientId and Origin.
CorsPolicyProvider.cs has a check in line #62:
if (await corsPolicyService.IsOriginAllowedAsync(origin))
when it returns false, you have your "CorsPolicyService did not allow origin: http://localhost:5000" message in line #69.
I assume, you are using IdentityServer4.EntityFramework. Here is the IsOriginAllowedAsync method from CorsPolicyService.cs located in IdentityServer4.EntityFramework.Services namespace:
/// <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);
}
Look at isAllowed, it is populated with data from AllowedCrossOrigins collection the content of which is stored in the [dbo].[ClientCorsOrigin] table.
So, please double check what you have in ClientCorsOrigin table.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With