Ошибка ModelState при внешней аутентификации Facebook - PullRequest
0 голосов
/ 08 апреля 2019

Я изучаю ASP.NET Core 2.2 MVC Framework.Я создал простое приложение, дал ему имя и сейчас работаю с документацией Microsoft, чтобы оно работало.Моя текущая цель - настроить внешнюю проверку подлинности Facebook.

У меня есть шаблон Visual Studio, который включает проверку подлинности для отдельной учетной записи пользователя, и я планирую развернуть это приложение в облаке Azure.Я выполнил все шаги, чтобы зарегистрировать свое приложение на странице разработчика Facebook.Я специально не хочу жестко кодировать идентификатор приложения Facebook и секрет файла запуска, потому что я хочу реализовать хранилище ключей Azure для повышения безопасности.Я предпочитаю использовать хранилище ключей Azure вместо локальных секретов, потому что хочу развернуть это решение в облаке.

Проблема в том, что, если я запускаю решение, я вижу правильную кнопку, отображающую менядля аутентификации Facebook.Он направляет меня на страницу их ошибок, и в отладчике я вижу эту ошибку:

Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker: Информация: выполнение метода-обработчика RecipeBox3._0.Areas.Identity.Pages.Account.ExternalLoginModel.OnPost с аргументами (Facebook, /) - недействительный ModelState

Нет документации по этой ошибке, и я бегу кругами, пытаясь выяснить причинуэта ошибка.Могу ли я получить какую-нибудь помощь?

Я пробовал множество исследований того, что нужно передать Facebook;если им нужно больше, чем идентификатор и секрет, то я не могу найти ничего, что говорит это.Я безуспешно пытался пройтись по шагам, чтобы выяснить, какие данные передаются в Facebook. Отсутствует фундаментальное понимание того, как ASP.Net Core обрабатывает удостоверения и службы.

Это немногомоя конфигурация запуска, которую я называю своим классом Facebook, который читает из хранилища ключей Azure

 services.Configure<Facebook>(Configuration);
            services.AddTransient<Facebook>();
            services.AddAuthentication().AddFacebook(facebookOptions =>
                        {
                            facebookOptions.AppId = Options.facebookID.ToString();
                            facebookOptions.AppSecret = Options.FacebookSecret.ToString();
                        });

            services.Configure<RecipeBox3._0.Services.SendGrid>(Configuration);
            services.AddTransient<IEmailSender, EmailSender>();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Это мой класс Facebook (случай точно соответствует тому, что находится внутри хранилища ключей)

public class Facebook
{
   public long facebookID { get; set; }
   public long FacebookSecret { get; set; }
}

1 Ответ

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

Я понял это!Мне пришлось вызывать значения внутри KeyVault следующим образом:

 facebookOptions.AppId = Configuration["facebookID"];
                           facebookOptions.AppSecret = Configuration["FacebookSecret"];

Так что мой класс не работал должным образом.

...