Facebook外部身份验证上的ModelState错误

时间:2019-04-08 17:59:36

标签: authentication asp.net-core configuration modelstate

我正在学习ASP.NET Core 2.2 MVC框架。我已经构建了一个简单的应用程序,为其命名,并且目前正在通过Microsoft文档进行工作。我目前的目标是建立Facebook外部身份验证。

我有Visual Studio的模板,其中包括个人用户帐户身份验证,并且我计划将此应用程序部署到Azure云。我按照所有步骤通过Facebook的开发人员页面注册了我的应用程序。我特别不想对Facebook的应用程序ID和启动文件的秘密进行硬编码,因为我想实现Azure密钥库以提高安全性。我选择使用Azure密钥库而不是本地机密,因为我想将此解决方案部署到云中。

问题在于,如果我运行该解决方案,则会看到显示正确的按钮,将我带到Facebook的身份验证。它将我路由到他们的错误页面,并且在调试器中,我看到此错误:

  

Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:信息:   执行处理程序方法   RecipeBox3._0.Areas.Identity.Pages.Account.ExternalLoginModel.OnPost   带有参数(Facebook,/)的-ModelState无效

没有有关此错误的文档,我正围着圈子奔跑,试图找出此错误的原因。有什么办法可以帮助我吗?

我已经尝试了很多研究,以研究Facebook需要通过什么。如果他们需要的不仅仅是ID和机密信息,那么我什么也找不到。我试图逐步检查出哪些数据没有运气被传递给Facebook,因为对ASP.Net Core如何处理身份和服务缺乏基本的了解。

这是我在“启动配置”中称为Facebook类的位,该类从Azure Key Vault读取

 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 :(得分:0)

我知道了!我不得不像这样调用KeyVault内部的值:

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

所以我的课没有按预期工作。