ASP.NET核心Web应用程序与OAuth Facebook提供程序错误

时间:2017-05-17 19:30:04

标签: asp.net-core oauth-2.0 asp.net-core-mvc facebook-oauth

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

让它在本地工作没有任何问题但是当我部署到Azure时,我开始收到错误。

过了一会儿,我得到一个错误说明:

An error occurred while starting the application 

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

现在我可以看到错误详情:

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()

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

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

我发现examples显示ClientId用于Google和Microsoft提供商,但不是Facebook。 (这是一个很大的页面,但只是搜索'ClientId') 我已经尝试添加ClientId但只是得到了相同的错误。

3 个答案:

答案 0 :(得分:3)

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

您说它在本地运行,但在Azure上运行,这可能意味着您在appsettings.Development.json中配置了您的Facebook身份验证,该身份验证在您的开发箱上使用,但在部署到Azure时则不然。

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

{
  "Authentication": {
    "Facebook": {
      "Id": "1943349465943333",
      "AppSecret": "4bbc86c773aa1df91d52b421e129433"
    }
  }
}

您可以查看https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration了解详情。

答案 1 :(得分:0)

我有同样的问题,当我硬编码它的工作价值时

app.UseFacebookAuthentication(new FacebookOptions()
            {
                //AppId = Configuration["Authentication:Facebook:Id"],
                //AppSecret = Configuration["Authentication:Facebook:AppSecret"]

                AppId = "1943349465943333",
                AppSecret = "4bbc86c773aa1df91d52b421e129433"


            });

尝试对您的价值进行编码并查看。除非你找到了答案然后请分享

答案 2 :(得分:-2)

只需删除标记... 配置[

......它应该有效

而不是这个,

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

使用此

app.UseFacebookAuthentication(new FacebookOptions()
{
    AppId ="Authentication:Facebook:AppId"],
    AppSecret = "Authentication:Facebook:AppSecret"]
});