Почему эта политика CORS не работает ASP.NET Core - PullRequest
0 голосов
/ 15 февраля 2019

Я пытался настроить аутентификацию токена Discord Oauth2 в проекте ASP.NET Core 2.2 / Angular 7, и это было довольно ухабисто.

Я использую this

Я действительно не могу найти какие-либо примеры, которые дают больше, чем часть объяснения, необходимого для установки всего этого.Ошибка, с которой я сейчас борюсь, заключается в следующем:

Access to XMLHttpRequest at 'https://discordapp.com/oauth2/authorize?client_id=<removed>&scope=identify&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2Fsignin-discord&state=<removed>'
(redirected from 'http://localhost:5000/api/v1/Authentication/SignIn') from origin 'http://localhost:5000' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

Для контекста, вот мой код:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll",
            builder => builder.WithOrigins("http://localhost:5000").AllowAnyHeader());
    });
    ...
    services.AddAuthentication(options =>
        {
            options.DefaultScheme = DiscordAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = DiscordAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        }).AddCookie(options =>
        {
            options.LoginPath = "/login";
            options.LogoutPath = "/signout";
            options.ExpireTimeSpan = TimeSpan.FromMinutes(10);
            options.SlidingExpiration = true;
        })
        .AddDiscord(options =>
        {
            options.ClientId = "<removed>";
            options.ClientSecret = "<removed>";
            options.Scope.Add("identify");
        });
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseCors("AllowAll");
    ...
}

// in AuthenticationController.cs
public class AuthenticationController : Controller
{
    [HttpPost("[action]")]
    public IActionResult SignIn()
    {
        return Challenge(new AuthenticationProperties {RedirectUri = "http://localhost:5000"});
    }
    ...
}

Что я пробовал

Я попытался выполнить это

Я попробовал все эти комбинации services.addCors() и app.UseCors() безрезультатно

services.AddCors();
app.UseCors(builder =>
   builder.WithOrigins("http://localhost:5000").AllowAnyHeader());

services.AddCors();
app.UseCors(builder =>
   builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

и все, что между ними.Ошибка не меняется независимо от того, что я делаю с Cors.Кроме того, да, у меня установлен пакет Microsoft.AspNetCore.Cors nu-get.Да, app.UseCors() вызывается раньше app.useMvc

Есть еще идеи?

1 Ответ

0 голосов
/ 21 апреля 2019

Я столкнулся с подобной проблемой сегодня, но понял это позже.Убедитесь, что вы используете те же версии сетевого ядра.Я использовал пакеты 2.1 и 2.2.

...