【发布时间】:2019-08-29 22:38:22
【问题描述】:
我正在学习 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 带参数 (Facebook, /) - ModelState 无效
没有关于这个错误的文档,我正在兜圈子试图找出这个错误的原因。有什么办法可以得到帮助吗?
我已经尝试了大量研究 Facebook 需要通过什么;如果他们需要的不仅仅是 id 和 secret,那么我找不到任何能说明这一点的东西。我尝试逐步找出哪些数据正在传递给 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; }
}
【问题讨论】:
-
更新:如果我对 ID 和密码进行硬编码,它就可以工作。所以 Key Vault 检索一定有问题。
标签: authentication asp.net-core configuration modelstate