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 Seiteerstellt wurde.

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ügenaus. 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 für Rückruf-URLs während der Entwicklung https://localhost:{PORT}/signin-twitter , wobei der Platzhalter der Port der App {PORT} 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 wie 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 des geheimnisspeichers.

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

    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. Beispielsweise wird das : Trennzeichen von :nicht unterstützt, __ aber ist .
  • 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 Startup.ConfigureServices hinzu:

{
    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(String)-Überladung legt die DefaultScheme-Eigenschaft fest. Die Überladung AddAuthentication(Action AuthenticationOptions > ) 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 AddAuthentication

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 benötigt, verketten Sie die Erweiterungsmethoden für Anbieter 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 nicht durch Aufrufen von in konfiguriert services.AddIdentityConfigureServices wird, führt der Versuch der Authentifizierung zu services.AddIdentity 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 ConsumerSecret die 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.