.Net Core Firebase Аутентификация электронной почты Google с помощью JWT - 401 - PullRequest
6 голосов
/ 18 мая 2019

Я пытаюсь использовать firebase аутентификацию электронной почты на моем .net core веб-бэкэнде через JWT. Я не смог найти подробный и понятный пример.

  1. Я получаю успешный вход в приложение android, затем я получаю IdToken.

  2. Я отправляю IdToken с префиксом "Bearer" в PostMan (или приложении) на мой контроллер. Но это дает 401

Что бы я ни пытался, я не смог получить 200. Только 401.

Конфигурация моего сервиса:

services
    .AddAuthentication(o =>
    {
        o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer("Bearer", options =>
    {
        options.Authority = "https://securetoken.google.com/myapp-c1e32";
        options.SaveToken = true;
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://securetoken.google.com/myapp-c1e32",
            ValidateAudience = true,
            ValidAudience = "myapp-c1e32",
            ValidateLifetime = true
        };
    });

Мой контроллер:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public ActionResult GetAllRoomsWithOtherInfos(int id)
{
    var rooms = _roomService.GetAllRoomsWithOtherInfos(id);
    return Ok(rooms);
}

Мой запрос:

http://localhost:5000/Room/GetAllRoomsWithOtherInfos/1

Сообщение об исключении в журнале:

Носитель не был аутентифицирован. Сообщение об ошибке: IDX10501: Подпись проверка не удалась. Невозможно сопоставить ключи:

Также мои приложения и сервисные конфигурации

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
        services.AddDbContext<TaraftarServerContext>(options => options.UseMySql(Configuration.GetConnectionString(GlobalVariables.DbConnectionName)));
        services.AddMvc(options =>
            {
                options.Filters.Add<GlobalExceptionFilter>();
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
            .AddFluentValidation();
        services.AddKendo();
        services.AddSignalR(hubOptions =>
            {
                hubOptions.EnableDetailedErrors = true;
            })
            .AddJsonProtocol(jsonOptions =>
            {
                jsonOptions.PayloadSerializerSettings.ContractResolver = new DefaultContractResolver();
                jsonOptions.PayloadSerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
            });
        services.AddWebClientServices();

        // configure strongly typed settings objects
        var appSettingsSection = Configuration.GetSection("AppSettings");
        services.Configure<AppSettings>(appSettingsSection);

        // this method is above configuration where the jwt is ( My service Configuration:)
        services.AddFirebaseAuthentication(Configuration);

    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();

        var supportedCultures = new[]
        {
            new CultureInfo("tr")
        };

        app.UseRequestLocalization(
            new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture("tr"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures,
                FallBackToParentCultures = true,
                FallBackToParentUICultures = true,
                RequestCultureProviders = null
            });

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Room}/{action=Index}/{id?}");
        });

    }

.Net Core версии: 2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...