我正在学习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; }
}
答案 0 :(得分:0)
我知道了!我不得不像这样调用KeyVault内部的值:
facebookOptions.AppId = Configuration["facebookID"];
facebookOptions.AppSecret = Configuration["FacebookSecret"];
所以我的课没有按预期工作。