我有一个非常简单的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"]
});