2017-05-17 6 views
2

私はFacebookのOAuthプロバイダとSqliteデータベースを追加したデフォルトのASP.NET Core Webアプリケーションからなる非常に単純なWebアプリケーションを持っています。OAuth Facebookプロバイダのエラーを伴うASP.NETコア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() 

私はオンラインで見つけることができるすべてのドキュメントは、あなただけのFacebook用のAppIDとAppSecretを必要としなければならないと言うので、これは奇妙です。 Microsoft guideに従ってこれを設定しました。ここ はStartup.csの該当ビットです:

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

私はexamplesは、GoogleとMicrosoftのプロバイダではなく、Facebookのために使用されてClientIdのを示すことがわかりました。 (これは大きなページですが、「ClientId」を検索するだけです) ClientIdを追加しようとしましたが、同じエラーが表示されます。

+0

クライアントIDは、基本クラスとプロトコルでアプリIDがマップされるためです。 Facebookは何らかの理由で彼らのドキュメントに非標準的な名前を使用しています。より具体的なエラーメッセージのバグを報告することができます。 – Tratcher

答えて

0

私は同じ問題とするとき、私のハードコード、それは

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

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


      }); 

の作品の値は、あなたの値をハードコーディングしてみてくださいと表示されています。あなたは答えを見つけた後、

+0

ありがとう、それを試みます。 – Steve

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

'Configuration 'を削除すると、設定から情報が取得されなくなるだけで、@yvanstackのようにIdとAppSecretがハードコードされます。 –

+0

そして、末尾のためにコンパイルされません。 – Tratcher

2

このエラーは、t彼のキーAuthentication:Facebook:AppIdはあなたのConfigurationオブジェクトに見つかりません。一般的なASP.NETコアアプリケーションでは、そのオブジェクトはappsettings.jsonファイルから入力されます。

これはローカルでは動作しますが、Azureでは動作していないと言われています。おそらく、あなたのFacebook認証をappsettings.Development.jsonに設定しています。これはDevボックスで使用されますがAzureには使用されません。

だからあなたappsettings.jsonファイルは次のようになります、総括する:

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

あなたはより多くの情報のためhttps://docs.microsoft.com/en-us/aspnet/core/fundamentals/configurationを見ることができます。

+0

これは合理的な説明のようです。私はこのプロジェクトのためにFacebookの認証を必要とせず、私はもはやそれに取り組んでいませんが、私は分を試してみることを覚えてしようとします。 – Steve

関連する問題