2017-05-17 3 views
2

Ich habe eine sehr einfache Web-Anwendung, die aus der Standard ASP.NET Core Web-Anwendung, die ich den Facebook-OAuth-Provider und eine SQLite-Datenbank hinzugefügt haben.ASP.NET Core Web-Anwendung mit OAuth Facebook-Provider Fehler

Es funktionierte lokal ohne Probleme, aber wenn ich nach Azure bereitstellen, fing ich an, Fehler zu bekommen.

Nach einer Weile bekam ich auf einen Fehler, der besagt:

An error occurred while starting the application 

Nachdem das Internet für ein paar Stunden suchen und verschiedene Möglichkeiten, tatsächlich versucht, den Fehler zu sehen, stieß ich auf die Antwort here.

Jetzt kann ich die Fehlerdetails sehen:

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

Das ist seltsam, weil alle die Dokumentation ich online finden kann, sagt Sie nur AppId und AppSecret für Facebook benötigen sollten. Ich folgte dem Microsoft guide, um diese Konfiguration zu erhalten. Hier ist das entsprechende Bit von Startup.cs:

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

I examples zeigend ClientId verwendet wird für die Google und Microsoft-Provider aber nicht Facebook gefunden haben. (Es ist eine große Seite, aber suchen Sie einfach nach 'ClientId') Ich habe versucht, ClientId hinzuzufügen, aber bekomme nur den gleichen Fehler.

+0

Es wird die Client-ID angegeben, da dies der App-ID in der Basisklasse und im Protokoll entspricht. Facebook verwendet aus irgendeinem Grund einen nicht standardmäßigen Namen in ihren Dokumenten. Sie könnten einen Fehler für eine spezifischere Fehlermeldung einreichen. – Tratcher

Antwort

0

Ich habe das gleiche Problem, und wenn ich die Werte harten Code funktioniert es

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

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


      }); 

versuchen, Ihre Werte harte Kodierung und sehen. es sei denn, Sie die Antwort gefunden und bitte

+0

Danke, werde das versuchen. – Steve

-2

Entfernen Sie einfach den Tag ... Konfiguration [

dann teilen ... und es sollte

statt dies umgehen,

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

Einsatz dies

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

Das Entfernen von 'Configuration [' verhindert einfach, dass die Informationen aus der Konfiguration abgerufen werden, und wird nur die ID und AppSecret fest codieren (wie @ yvanstack vorgeschlagen). –

+0

Und kompiliert nicht aufgrund der nachlaufenden] – Tratcher

2

Sie erhalten diesen Fehler, weil t Der Schlüssel Authentication:Facebook:AppId kann nicht in Ihrem Configuration Objekt gefunden werden. In einer typischen ASP.NET Core-Anwendung wird dieses Objekt aus der Datei appsettings.json gefüllt.

Sie sagen, dass es lokal funktioniert, aber nicht auf Azure, was wahrscheinlich bedeutet, dass Sie Ihre Facebook-Authentifizierung in appsettings.Development.json konfiguriert haben, die auf Ihrer Dev-Box verwendet wird, aber nicht bei der Azure-Bereitstellung.

So zusammenzufassen, Ihre appsettings.json Datei sollte wie folgt aussehen:

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

Sie weitere Informationen finden können https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration.

+0

Das klingt nach einer vernünftigen Erklärung. Ich brauchte keine Facebook-Authentifizierung für dieses Projekt und ich arbeite nicht mehr daran, sondern werde versuchen, es auszuprobieren, wenn ich eine Minute habe. – Steve

Verwandte Themen