У меня есть эта проблема, которая сводит меня с ума ... У меня есть бэкэнд API, который включает CORS и проверку подлинности Windows, выглядит так
launchSettings.json:
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
....
}
Запуск.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
}
И
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
TokenController.cs
[ApiController]
[Route("[controller]")]
public class TokenController : ControllerBase
{
private TokenService userService;
IHttpContextAccessor httpContextAccessor;
public TokenController(TokenService _userService,
IHttpContextAccessor _httpContextAccessor)
{
userService = _userService;
httpContextAccessor = _httpContextAccessor;
}
/// <summary>
/// Creates token for domain signed user of Unicredit group
/// </summary>
/// <returns>Authenticate</returns>
[HttpGet]
[Route("")]
[ProducesResponseType(typeof(string), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[Produces("application/json")]
public IActionResult Authenticate()
{
string username = httpContextAccessor.HttpContext.User.Identity.Name;
... further reading from AD and making JWT token
}
React - Authenticate.js (делает простую выборку)
fetch(`${AuthenticationEndpoint}/`)
.then(response => response.json())
.then(data => this.onSetResult(data));
Поэтому, когда я вызываю свой API с использованием Boomerang
(как у почтальона) и просто делаю простой GET
для https://localhost:{port}/Token/
, я получаю status 200
и мой токен JWT обратно, но как только я получаю данные из своего приложения ReactЯ получаю сообщение об ошибке:
Access to fetch at 'https://localhost:44351/Token/' from origin 'http://localhost:3000' has been blocked by CORS policy
Я понимаю, что ни Бумеранг, ни Почтальон не ограничены политикой, и именно поэтому они могут перейти к моему API, но как я могу позволить своему приложению получить доступ к моемуAPI?