.Net Core 2.1 CORS и авторизация с помощью Firebase JWT - PullRequest
0 голосов
/ 12 октября 2018

Я слежу за этим сообщением в блоге по аутентификации с помощью firebase с .net Core 2 https://blog.markvincze.com/secure-an-asp-net-core-api-with-firebase/

(я понимаю, что использую .net core 2.1, но думаю, что это должно быть похоже)

Я использую интерфейс React с .net core 2.1 WebApi Backend.

У меня нет проблем с контроллером, однако , как только я пытаюсь добавить аутентификацию в startup.cs Затем я получаю: Заблокированный запрос перекрестного источника: Политика одного источника запрещает чтение удаленного ресурса на локальном хосте: 4000 (Причина: запрос CORS не был выполнен)

До этой точки работает нормально

Мой запрос поступил от http://localhost:3000

ОБНОВЛЕНИЯ ------------------------------------------------------------------

Как примечание, это работает при использовании POSTMAN. Я могу аутентифицироваться с помощью Firebase И без проблем нажимать на контроллер

Также работает в Chrome.Кажется, проблема с браузером Firefox

Моя реализация (после успешного входа в Firebase)

Запрос Axios

axois
.get("https://localhost:4000/v1/picture", {
  headers: {
    accept: "application/json",
    "Accept-Language": "en-US,en;q=0.8",
    "Content-Type": `multipart/form-data;`,
    Authorization: "Bearer " + localStorage.getItem("token") 
    //Is the above the correct way to pass a jwt to be authenticated backend? This is the full jwt returned by Firebase
  }
})

Startup.cs

services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigin",
                    builder => builder.WithOrigins("http://localhost:3000")
                        .AllowAnyMethod()
                        .AllowAnyHeader());
            }
        );

        //https://blog.markvincze.com/secure-an-asp-net-core-api-with-firebase/
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority = "https://securetoken.google.com/mafirebaseapp";
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = "https://securetoken.google.com/mafirebaseapp",
                    ValidateAudience = true,
                    ValidAudience = "mafirebaseapp",
                    ValidateLifetime = true
                };
            });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
...

...
        app.UseCors("AllowSpecificOrigin");
        app.UseAuthentication();
        app.UseHttpsRedirection();
        app.UseMvc();
}

PictureController.cs

[Route("v1/picture")]
public class PictureController : Controller
{
    [Authorize]
    [HttpGet]
    public IActionResult GetPicture()
    {
        return Ok("Hi");
    }
}

Я посмотрел на другой пост, который указал, что порядокметоды имели значение, поэтому я не думаю, что это проблема.

Любая помощь будет высоко ценится!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Вы можете использовать этот пакет NuGet, чтобы упростить его (поддержка AspNetCore> = 2.0)

Install-Package AspNetCore.Firebase.Authentication

В Startup.csfile

public void ConfigureServices(IServiceCollection services)
{
   services.AddFirebaseAuthentication(Configuration["FirebaseAuthentication:Issuer"], Configuration["FirebaseAuthentication:Audience"]);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
   app.UseAuthentication();
}

Просто используйте атрибут [Authorize] на ваших контроллерах для обеспечения авторизации

Источник: https://bitbucket.org/RAPHAEL_BICKEL/aspnetcore.firebase.authentication/src/master/

0 голосов
/ 13 октября 2018

Вы можете попытаться использовать указанную политику CORS для определенного действия, просто добавьте к своему действию [EnableCors("AllowSpecificOrigin")].

...