Dela via


Konfiguration av extern inloggning på Facebook i ASP.NET Core

Av Valeriy Novytskyy och Rick Anderson

Den här självstudien med kodexempel visar hur du gör så att användarna kan logga in med sitt Facebook-konto med hjälp av ett exempel ASP.NET Core-projekt som skapades på föregående sida. Vi börjar med att skapa ett Facebook-app-ID genom att följa de officiella stegen.

Skapa appen på Facebook

  • Lägg till NuGet-paketet Microsoft.AspNetCore.Authentication.Facebook i projektet.

  • Gå till appsidan för Facebook Developers och logga in. Om du inte redan har ett Facebook-konto använder du länken Registrera dig för Facebook på inloggningssidan för att skapa ett. När du har ett Facebook-konto följer du anvisningarna för att registrera dig som Facebook-utvecklare.

  • På menyn Mina appar väljer du Skapa app. Formuläret Skapa en app visas. Facebook för utvecklare-portalen öppen i Microsoft Edge

  • Välj en apptyp som passar ditt projekt bäst. För det här projektet väljer du Konsument och sedan Nästa. Ett nytt app-ID skapas.

  • Fyll i formuläret och tryck på knappen Skapa app .

    Skapa ett nytt app-ID-formulär

  • På sidan Lägg till produkter i din app väljer du KonfigureraFacebook-inloggningskortet .

    Produktkonfigurationssidan

  • Snabbstartsguiden startas med Välj en plattform som första sida. Kringgå guiden för tillfället genom att klicka på länken Inloggningsinställningar för FaceBook i menyn längst ned till vänster:

    Hoppa över snabbstart

  • Sidan Inställningar för klient-OAuth visas:

    Klientens OAuth-inställningssida

  • Ange din utvecklings-URI med /signin-facebook i fältet Giltiga URI:er för OAuth-omdirigering (till exempel: https://localhost:44320/signin-facebook). Facebook-autentiseringen som konfigureras senare i den här självstudien hanterar automatiskt begäranden på /signin-facebook-vägen för att implementera OAuth-flödet.

Anmärkning

URI /signin-facebook anges som standardåteranrop för Facebook-autentiseringsprovidern. Du kan ändra standardanrops-URI:n när du konfigurerar Mellanprogrammet för Facebook-autentisering via klassens FacebookOptions ärvda RemoteAuthenticationOptions.CallbackPath egenskap.

  • Välj Spara ändringar.

  • Välj Inställningar>Grundläggande länk i det vänstra navigeringsfältet.

  • Anteckna din App ID och din App Secret. Du lägger till båda i ditt ASP.NET Core-program i nästa avsnitt:

  • När du distribuerar webbplatsen måste du gå tillbaka till installationssidan för Facebook-inloggning och registrera en ny offentlig URI.

Lagra Facebook-app-ID och hemlighet

Lagra känsliga inställningar som Facebook-app-ID och hemliga värden med Secret Manager. Använd följande steg för det här exemplet:

  1. Initiera projektet för hemlig lagring enligt anvisningarna i Aktivera hemlig lagring.

  2. Lagra de känsliga inställningarna i det lokala hemlighetslagret med de hemliga nycklarna Authentication:Facebook:AppId och Authentication:Facebook:AppSecret:

    dotnet user-secrets set "Authentication:Facebook:AppId" "<app-id>"
    dotnet user-secrets set "Authentication:Facebook:AppSecret" "<app-secret>"
    

Den : avgränsaren fungerar inte med hierarkiska nycklar för miljövariabler på alla plattformar. Till exempel stöds inte :-avgränsaren av Bash. Det dubbla understrecket, __, är:

  • Stöds av alla plattformar.
  • Ersätts automatiskt av ett kolon, :.

Konfigurera Facebook-autentisering

Lägg till autentiseringstjänsten i Startup.ConfigureServices:

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
    facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});

Lägg till autentiseringstjänsten i Program:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddFacebook(facebookOptions =>
    {
        facebookOptions.AppId = configuration["Authentication:Facebook:AppId"];
        facebookOptions.AppSecret = configuration["Authentication:Facebook:AppSecret"];
    });

Överbelastningen AddAuthentication(IServiceCollection, String) ställer in egenskapen DefaultScheme. Med AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) överlagring kan du konfigurera autentiseringsalternativ, som kan användas för att konfigurera standardautentiseringsscheman för olika syften. Efterföljande anrop till AddAuthentication åsidosätter tidigare konfigurerade egenskaper för AuthenticationOptions.

AuthenticationBuilder tilläggsmetoder som registrerar en autentiseringshanterare kan bara anropas en gång per autentiseringsschema. Det finns överlagringar som gör det möjligt att konfigurera schemaegenskaper, schemanamn och visningsnamn.

Logga in med Facebook

  • Kör appen och välj Logga in.
  • Under Använd en annan tjänst för att logga in. väljer du Facebook.
  • Du omdirigeras till Facebook för autentisering.
  • Ange dina Facebook-autentiseringsuppgifter.
  • Du omdirigeras tillbaka till din webbplats där du kan ange din e-post.

Du är nu inloggad med dina Facebook-autentiseringsuppgifter:

Reagera om du vill avbryta auktorisering av extern inloggning

AccessDeniedPath kan ange en omdirigeringssökväg till användaragenten när användaren inte godkänner det begärda auktoriseringsbehovet.

Följande kod anger AccessDeniedPath till "/AccessDeniedPathInfo":

services.AddAuthentication().AddFacebook(options =>
{
    options.AppId = Configuration["Authentication:Facebook:AppId"];
    options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    options.AccessDeniedPath = "/AccessDeniedPathInfo";
});

Vi rekommenderar att sidan AccessDeniedPath innehåller följande information:

  • Fjärrautentisering avbröts.
  • Den här appen kräver autentisering.
  • Om du vill försöka logga in igen väljer du länken Inloggning.

Testa AccessDeniedPath

  • Gå till facebook.com
  • Om du är inloggad måste du logga ut.
  • Kör appen och välj Facebook-inloggning.
  • Välj Inte nu. Du omdirigeras till den angivna AccessDeniedPath sidan.

Vidarebefordra begärans information genom en proxy eller lastbalanserare

Om appen distribueras bakom en proxyserver eller lastbalanserare kan en del av den ursprungliga begärandeinformationen vidarebefordras till appen i begärandehuvuden. Den här informationen omfattar vanligtvis schemat för säker begäran (https), värd och klientens IP-adress. Appar läser inte automatiskt dessa begärandehuvuden för att identifiera och använda den ursprungliga begärandeinformationen.

Schemat används i länkgenerering som påverkar autentiseringsflödet med externa leverantörer. Att förlora det säkra schemat (https) resulterar i att appen genererar felaktiga osäkra omdirigerings-URL:er.

Använd middleware för vidarebefordrade rubriker för att göra den ursprungliga begärandeinformationen tillgänglig för appen vid behandling av förfrågningar.

Mer information finns i Konfigurera ASP.NET Core att fungera med proxyservrar och lastbalanserare.

Mer information om konfigurationsalternativ som stöds av Facebook-autentisering finns i API-referensen FacebookOptions . Konfigurationsalternativ kan användas för att:

  • Begär annan information om användaren.
  • Lägg till frågesträngsargument för att anpassa inloggningsupplevelsen.

Felsökning

  • endast ASP.NET Core 2.x: Om Identity inte har konfigurerats genom att anropa services.AddIdentity i ConfigureServicesresulterar försök att autentisera i ArgumentException: Alternativet SignInScheme måste anges. Projektmallen som används i den här guiden ser till att detta blir gjort.
  • Om platsdatabasen inte har skapats genom att tillämpa den första migreringen får du En databasåtgärd misslyckades när begäran bearbetades fel. Tryck på Använd migreringar för att skapa databasen och uppdatera för att fortsätta förbi felet.

Nästa steg

  • Den här artikeln visade hur du kan autentisera med Facebook. Du kan följa en liknande metod för att autentisera med andra leverantörer som anges på föregående sida.

  • När du har publicerat din webbplats till Azure-webbappen bör du återställa den AppSecret i Facebook-utvecklarportalen.

  • Ange Authentication:Facebook:AppId och Authentication:Facebook:AppSecret som programinställningar i Azure-portalen. Konfigurationssystemet är konfigurerat för att läsa nycklar från miljövariabler.

Ytterligare resurser

Flera autentiseringsprovidrar