带有 OAuth Facebook 提供程序错误的 ASP.NET Core Web 应用程序

Ste*_*eve 4 oauth-2.0 facebook-oauth asp.net-core-mvc asp.net-core

我有一个非常简单的 Web 应用程序,其中包含我添加了 Facebook OAuth 提供程序和 Sqlite 数据库的默认 ASP.NET Core Web 应用程序。

让它在本地运行没有任何问题,但是当我部署到 Azure 时,我开始出现错误。

过了一会儿,我遇到了一个错误,指出:

An error occurred while starting the application 
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索了几个小时并尝试了各种方法来实际查看错误后,我在这里偶然发现了答案。

现在我可以看到错误详细信息:

ArgumentException: The 'ClientId' option must be provided.
Microsoft.AspNetCore.Authentication.OAuth.OAuthMiddleware..ctor(RequestDelegate next, IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, UrlEncoder encoder, IOptions<SharedAuthenticationOptions> sharedOptions, IOptions<TOptions> options)
Microsoft.AspNetCore.Authentication.Facebook.FacebookMiddleware..ctor(RequestDelegate next, IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, UrlEncoder encoder, IOptions<SharedAuthenticationOptions> sharedOptions, IOptions<FacebookOptions> options)
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.Extensions.Internal.ActivatorUtilities+ConstructorMatcher.CreateInstance(IServiceProvider provider)
Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters)
Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass3_0.<UseMiddleware>b__0(RequestDelegate next)
Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build()
Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我可以在网上找到的所有文档都说你应该只需要 Facebook 的 AppId 和 AppSecret。我按照 Microsoft指南进行了配置。这是 Startup.cs 的相关部分:

    app.UseFacebookAuthentication(new FacebookOptions()
    {
        AppId = Configuration["Authentication:Facebook:AppId"],
        AppSecret = Configuration["Authentication:Facebook:AppSecret"]
    });
Run Code Online (Sandbox Code Playgroud)

我找到了一些示例,显示 ClientId 用于 Google 和 Microsoft 提供商,但没有用于 Facebook。(这是一个很大的页面,但只需搜索“ClientId”)我尝试添加 ClientId,但遇到相同的错误。

Mét*_*ule 5

您收到此错误是因为Authentication:Facebook:AppId在您的Configuration对象中找不到密钥。在典型的 ASP.NET Core 应用程序中,该对象是从appsettings.json文件中填充的。

你是说它在本地工作,而不是在 Azure 上,这可能意味着你在 中配置了你的 Facebook 身份验证appsettings.Development.json,它在你的 Dev box 上使用,但在部署到 Azure 时不使用。

总而言之,您的appsettings.json文件应如下所示:

{
  "Authentication": {
    "Facebook": {
      "Id": "1943349465943333",
      "AppSecret": "4bbc86c773aa1df91d52b421e129433"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以查看https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration了解更多信息。