Dela via


Extern inloggning på Twitter med ASP.NET Core

Av Valeriy Novytskyy och Rick Anderson

Det här exemplet visar hur du gör det möjligt för användare att logga in med sitt Twitter-konto med hjälp av ett exempel ASP.NET Core-projekt som skapades på föregående sida.

Anmärkning

Microsoft.AspNetCore.Authentication.Twitter-paketet som beskrivs nedan använder API:er för OAuth 1.0 som tillhandahålls av Twitter. Twitter har sedan dess lagt till OAuth 2.0-API:er med en annan uppsättning funktioner. OpenIddict- och AspNet.Security.OAuth.Twitter-paketen är communityimplementeringar som använder de nya OAuth 2.0-API:erna.

Skapa appen på Twitter

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

  • Gå till Instrumentpanelen för Twitter-utvecklarportalen och logga in. Om du inte redan har ett Twitter-konto använder du länken Registrera dig nu för att skapa ett.

  • Om du inte har ett projekt skapar du ett.

  • Välj + Lägg till app. Fyll i appnamnet och registrera sedan den genererade API-nyckeln, API-nyckelhemligheten och ägartoken. Dessa kommer att behövas senare.

  • På sidan Appinställningar väljer du Redigera i avsnittet Autentiseringsinställningar och sedan:

    • Aktivera 3-legged OAuth
    • Begär e-postadress från användare
    • Fyll i de obligatoriska fälten och välj Spara

    Anmärkning

    Microsoft.AspNetCore.Identity kräver att användarna har en e-postadress som standard. För återanrops-URL:er under utvecklingen använder du https://localhost:{PORT}/signin-twitter, där {PORT} platshållaren är appens port.

    Anmärkning

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

Lagra nyckeln och hemligheten för Twitter-konsument-API:et

Lagra känsliga inställningar, till exempel Nyckeln för Twitter-konsument-API:et och hemligheten 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 hemlighetsarkivet med nycklar för hemligheter Authentication:Twitter:ConsumerKey och Authentication:Twitter:ConsumerSecret:

    dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>"
    dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-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, :.

Dessa token finns på fliken Nycklar och åtkomsttoken när du har skapat ett nytt Twitter-program:

Konfigurera Twitter-autentisering

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

{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication().AddTwitter(twitterOptions =>
    {
        twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerAPIKey"];
        twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
        twitterOptions.RetrieveUserDetails = true;
    });

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

services.AddAuthentication().AddTwitter(twitterOptions =>
    {
        twitterOptions.ConsumerKey = configuration["Authentication:Twitter:ConsumerAPIKey"];
        twitterOptions.ConsumerSecret = configuration["Authentication:Twitter:ConsumerSecret"];
    });

Ö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.

Mer information om konfigurationsalternativ som stöds av Twitter-autentisering finns i API-referensen TwitterOptions . Detta kan användas för att begära annan information om användaren.

Logga in med Twitter

Kör appen och välj Logga in. Ett alternativ för att logga in med Twitter visas:

Om du väljer Twitter omdirigeras till Twitter för autentisering:

När du har angett dina Twitter-autentiseringsuppgifter omdirigeras du tillbaka till webbplatsen där du kan ange din e-post.

Du är nu inloggad med dina Twitter-autentiseringsuppgifter:

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.

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. Den projektmall som används i det här exemplet säkerställer att Identity är konfigurerad.
  • Om platsdatabasen inte har skapats genom att tillämpa den första migreringen kommer du få ett felmeddelande: En databasoperation misslyckades vid bearbetning av begäran. 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 Twitter. 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 webbplatsen till Azure-webbappen bör du återställa den ConsumerSecret i Twitter-utvecklarportalen.

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

Ytterligare resurser

Flera autentiseringsprovidrar