我有一个非常简单的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但只是得到了相同的错误。
答案 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"]
});