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



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

让它在本地工作没有任何麻烦,但是当我部署到 Azure 时,我开始出现错误。

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

An error occurred while starting the application 

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

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

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

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

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

我发现一些例子显示ClientId被用于谷歌和Microsoft提供商,而不是Facebook。(这是一个大页面,但只需搜索"ClientId"(我尝试添加ClientId,但只是收到相同的错误。

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

你说它在本地工作,但在Azure上不工作,这可能意味着你在appsettings.Development.json中配置了Facebook身份验证,该身份验证用于开发框,但不是在部署到Azure时。

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

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

有关详细信息,您可以查看 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration。

我有同样的问题,当我对值进行硬编码时,它可以工作

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

            });

尝试硬编码您的值并查看。 除非您找到答案,然后请分享

错误:参数异常:必须提供"AppId"选项。(参数"应用标识"(Microsoft.AspNetCore.Authentication.Facebook.FacebookOptions.Validate((

这在 .net 6 脸书登录错误中对我有用。刚刚删除了configuration[],仅此而已。

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;
services.AddAuthentication().AddFacebook(facebookOptions =>
    {
        facebookOptions.AppId = "Authentication:Facebook:AppId";
        facebookOptions.AppSecret = "Authentication:Facebook:AppSecret";
    });

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

。它应该工作

取而代之的是,

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"]
});

相关内容

最新更新