我正在学习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; }
}
我想到了!我不得不像这样调用KeyVault里面的值:
facebookOptions.AppId = Configuration["facebookID"];
facebookOptions.AppSecret = Configuration["FacebookSecret"];
所以我的班级没有按预期工作。