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

问题描述 投票:0回答:1

我正在学习ASP.NET Core 2.2 MVC框架。我已经构建了一个简单的应用程序,给它起了一个名字,我目前正在使用Microsoft文档来使其工作。我目前的目标是建立Facebook外部身份验证。

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

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

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

没有关于此错误的文档,我正在试图找出导致此错误的原因。有什么方法可以得到一些帮助吗?

我已经尝试了大量关于Facebook需要通过的研究;如果他们需要的不仅仅是身份和秘密,那么我找不到任何说法。我已经尝试逐步完成这些步骤,找出哪些数据传递给Facebook而没有运气,这是对ASP.Net Core如何处理身份和服务缺乏基本了解。

这是我的Startup Config中的一点,我称之为从Azure Key Vault读取的Facebook类

 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; }
}
authentication asp.net-core configuration modelstate
1个回答
0
投票

我想到了!我不得不像这样调用KeyVault里面的值:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.