2017-05-17 65 views
2

我有一個非常簡單的Web應用程序,包括我已添加到Facebook OAuth提供程序和Sqlite數據庫的默認ASP.NET Core Web應用程序。ASP.NET核心Web應用程序與OAuth Facebook提供程序錯誤

知道它在本地工作沒有任何問題,但是當我部署到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爲Facebook。 我跟着微軟guide得到這個配置。 這裏是Startup.cs的相關位:顯示正在使用的谷歌和微軟提供者,但不是Facebook

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

我發現examples客戶端Id。 (這是一個很大的頁面,但只是搜索'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

刪除配置['只會阻止從配置中檢索信息,並且只會對Id和AppSecret進行硬編碼(就像@yvanstack建議的那樣)。 –

+0

並沒有編譯,因爲跟蹤] – Tratcher

2

你得到這個錯誤,因爲噸他的鑰匙Authentication:Facebook:AppId無法在您的Configuration物件中找到。在典型的ASP.NET Core應用程序中,該對象是從appsettings.json文件填充的。

你說的是它可以在本地使用,但不適用於Azure,這可能意味着您在appsettings.Development.json中配置了您的Facebook身份驗證,它在您的Dev框中使用,但不在部署到Azure時使用。

所以總結起來,你appsettings.json文件應該是這樣的:

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

你可以看到https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration以獲取更多信息。

+0

這聽起來像一個合理的解釋。我並沒有因爲這個項目需要Facebook身份驗證,而且我也不再爲此工作,但我會盡量記得在我花一分鐘時試試。 – Steve

相關問題