Einrichten der externen Twitter-Anmeldung mit ASP.NET Core

Von Valeriy Novytskyy und Rick Anderson

Dieses Beispiel zeigt, wie Sie es Benutzern ermöglichen, sich mit ihrem Twitter-Konto anzumelden, indem Sie ein Beispiel ASP.NET Core-Projekts verwenden, das auf der vorherigen Seite erstellt wurde.

Hinweis

Das unten beschriebene Paket Microsoft.AspNetCore.Authentication.Twitter verwendet die von Twitter bereitgestellten OAuth 1a-APIs. Twitter hat seitdem OAuth 2-APIs mit einem anderen Satz von Funktionen hinzugefügt. Das AspNet.Security.OAuth.Twitter-Paket ist eine Communityimplementierungen, die die neuen OAuth 2-APIs verwendet.

Erstellen der App in Twitter

  • Fügen Sie dem Projekt das Paket Microsoft.AspNetCore.Authentication.Twitter NuGet hinzu.

  • Navigieren Sie zum Twitter-Entwicklerportaldashboard , und melden Sie sich an. Wenn Sie noch nicht über ein Twitter-Konto verfügen, verwenden Sie den Link Jetzt registrieren , um ein Konto zu erstellen.

  • Wenn Sie kein Projekt haben, erstellen Sie eines.

  • Wählen Sie + App hinzufügen aus. Geben Sie den App-Namen ein, und zeichnen Sie dann den generierten API-Schlüssel, das API-Schlüsselgeheimnis und das Bearertoken auf. Diese werden später benötigt.

  • Wählen Sie auf der Seite App Einstellungen im Abschnitt Authentifizierungseinstellungen die Option Bearbeiten und dann Folgendes aus:

    • Aktivieren von 3-legged OAuth
    • Anfordern der E-Mail-Adresse von Benutzern
    • Füllen Sie die erforderlichen Felder aus, und wählen Sie Speichern aus.

    Hinweis

    Microsoft.AspNetCore.Identity erfordert, dass Benutzer standardmäßig über eine E-Mail-Adresse verfügen. Verwenden Sie https://localhost:{PORT}/signin-twitterfür Rückruf-URLs während der Entwicklung , wobei der {PORT} Platzhalter der Port der App ist.

    Hinweis

    Das URI-Segment /signin-twitter wird als Standardrückruf des Twitter-Authentifizierungsanbieters festgelegt. Sie können den Standardrückruf-URI ändern, während Sie die Twitter-Authentifizierungs-Middleware über die geerbte RemoteAuthenticationOptions.CallbackPath Eigenschaft der TwitterOptions -Klasse konfigurieren.

Store des Twitter-Consumer-API-Schlüssels und -Geheimnisses

Store sensible Einstellungen, z. B. den Twitter-Consumer-API-Schlüssel und das Geheimnis mit Secret Manager. Verwenden Sie für dieses Beispiel die folgenden Schritte:

  1. Initialisieren Sie das Projekt für die Geheimnisspeicherung gemäß den Anweisungen unter Aktivieren der Geheimnisspeicherung.

  2. Store die vertraulichen Einstellungen im lokalen Geheimnisspeicher mit den Geheimschlüsseln Authentication:Twitter:ConsumerKey und Authentication:Twitter:ConsumerSecrethinzu:

    dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>"
    dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-secret>"
    

Das Trennzeichen : funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Der doppelte Unterstrich __:

  • wird auf allen Plattformen unterstützt. Das Trennzeichen : wird beispielsweise nicht von Bash unterstützt, __ hingegen schon.
  • automatisch durch : ersetzt.

Diese Token finden Sie nach dem Erstellen einer neuen Twitter-Anwendung auf der Registerkarte Schlüssel und Zugriffstoken :

Konfigurieren der Twitter-Authentifizierung

Fügen Sie den Authentifizierungsdienst dem hinzu 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"];
    });

Die AddAuthentication(IServiceCollection, String) -Überladung legt die DefaultScheme -Eigenschaft fest. Die AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) Überladung ermöglicht das Konfigurieren von Authentifizierungsoptionen, die zum Einrichten von Standardauthentifizierungsschemas für verschiedene Zwecke verwendet werden können. Nachfolgende Aufrufe zum AddAuthentication Überschreiben zuvor konfigurierter AuthenticationOptions Eigenschaften.

AuthenticationBuilder -Erweiterungsmethoden, die einen Authentifizierungshandler registrieren, können nur einmal pro Authentifizierungsschema aufgerufen werden. Überladungen sind vorhanden, die das Konfigurieren der Schemaeigenschaften, des Schemanamens und des Anzeigenamens ermöglichen.

Mehrere Authentifizierungsanbieter

Wenn die App mehrere Anbieter erfordert, verketten Sie die Anbietererweiterungsmethoden hinter AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Weitere Informationen zu konfigurationsoptionen, die von der Twitter-Authentifizierung unterstützt werden, finden Sie in der TwitterOptions API-Referenz. Dies kann verwendet werden, um verschiedene Informationen über den Benutzer anzufordern.

Anmelden mit Twitter

Führen Sie die App aus, und wählen Sie Anmelden aus. Eine Option zum Anmelden mit Twitter wird angezeigt:

Wenn Sie Twitter auswählen, werden Umleitungen zur Authentifizierung an Twitter weitergeleitet:

Nachdem Sie Ihre Twitter-Anmeldeinformationen eingegeben haben, werden Sie zurück zur Website weitergeleitet, auf der Sie Ihre E-Mail-Adresse festlegen können.

Sie sind jetzt mit Ihren Twitter-Anmeldeinformationen angemeldet:

Weiterleiten von Anforderungsinformationen mit einem Proxy oder Lastenausgleich

Wenn die App hinter einem Proxyserver oder Lastenausgleich bereitgestellt wird, können einige der ursprünglichen Anforderungsinformationen im Anforderungsheader an die App weitergeleitet werden. Zu diesen Informationen gehören in der Regel das sichere Anforderungsschema (https), den Host und die Client-IP-Adresse. Apps lesen diese Anforderungsheader nicht automatisch, um die ursprünglichen Anforderungsinformationen zu ermitteln und zu verwenden.

Das Schema wird bei der Linkgenerierung verwendet, die den Authentifizierungsflow bei externen Anbietern betrifft. Der Verlust des sicheren Schemas (https) führt dazu, dass die App falsche unsichere Umleitungs-URLs generiert.

Verwenden Sie Middleware für weitergeleitete Header, um der App zur Anforderungsverarbeitung die Informationen der ursprünglichen Anforderung verfügbar zu machen.

Weitere Informationen finden Sie unter Konfigurieren von ASP.NET Core für die Arbeit mit Proxyservern und Lastenausgleichen.

Problembehandlung

  • nur ASP.NET Core 2.x: Wenn Identity nicht durch Aufrufen services.AddIdentity von in ConfigureServiceskonfiguriert wird, führt der Versuch der Authentifizierung zu ArgumentException: Die Option "SignInScheme" muss bereitgestellt werden. Die in diesem Beispiel verwendete Projektvorlage stellt sicher, dass Identity konfiguriert ist.
  • Wenn die Standortdatenbank nicht durch Anwenden der ersten Migration erstellt wurde, erhalten Sie bei der Verarbeitung des Anforderungsfehlers einen Fehler bei einem Datenbankvorgang . Tippen Sie auf Migrationen anwenden, um die Datenbank zu erstellen und zu aktualisieren, um nach dem Fehler fortzufahren.

Nächste Schritte

  • In diesem Artikel wurde gezeigt, wie Sie sich mit Twitter authentifizieren können. Führen Sie einen ähnlichen Ansatz für die Authentifizierung mit anderen Anbietern aufgeführt, auf die Vorgängerseite.

  • Nachdem Sie Ihre Website in der Azure-Web-App veröffentlicht haben, sollten Sie die ConsumerSecret im Twitter-Entwicklerportal zurücksetzen.

  • Legen Sie die Authentication:Twitter:ConsumerKey und Authentication:Twitter:ConsumerSecret Anwendungseinstellungen im Azure-Portal. Das Konfigurationssystem ist zum Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.