Udostępnij za pośrednictwem


Konfiguracja logowania zewnętrznego w usłudze Twitter przy użyciu platformy ASP.NET Core

Autorzy: Valeriy Novytskyy i Rick Anderson

W tym przykładzie pokazano, jak umożliwić użytkownikom logowanie się przy użyciu konta usługi Twitter przy użyciu przykładowego projektu ASP.NET Core utworzonego na poprzedniej stronie.

Uwaga

Pakiet Microsoft.AspNetCore.Authentication.Twitter opisany poniżej używa interfejsów API OAuth 1.0 udostępnianych przez usługę Twitter. Od tego czasu usługa Twitter dodała interfejsy API OAuth 2.0 z innym zestawem funkcji. Pakiety OpenIddict i AspNet.Security.OAuth.Twitter to implementacje społeczności korzystające z nowych interfejsów API protokołu OAuth 2.0.

Tworzenie aplikacji w usłudze Twitter

  • Dodaj pakiet NuGet Microsoft.AspNetCore.Authentication.Twitter do projektu.

  • Przejdź do pulpitu nawigacyjnego portalu dla deweloperów usługi Twitter i zaloguj się. Jeśli nie masz jeszcze konta w usłudze Twitter, użyj linku Zarejestruj się teraz , aby go utworzyć.

  • Jeśli nie masz projektu, utwórz go.

  • Wybierz pozycję + Dodaj aplikację. Wypełnij nazwę aplikacji, a następnie zapisz wygenerowany klucz interfejsu API, klucz tajny interfejsu API i token elementu nośnego. Będą one potrzebne później.

  • Na stronie Ustawienia aplikacji wybierz pozycję Edytuj w sekcji Ustawienia uwierzytelniania, a następnie:

    • Włączanie 3-legged OAuth
    • Żądanie adresu e-mail od użytkowników
    • Wypełnij wymagane pola i wybierz pozycję Zapisz

    Uwaga

    Microsoft.AspNetCore.Identity wymaga, aby użytkownicy domyślnie mieli adres e-mail. W przypadku adresów URL wywołania zwrotnego podczas programowania użyj symbolu https://localhost:{PORT}/signin-twitter{PORT} , gdzie symbol zastępczy jest portem aplikacji.

    Uwaga

    Segment /signin-twitter identyfikatora URI jest ustawiany jako domyślne wywołanie zwrotne dostawcy uwierzytelniania w usłudze Twitter. Domyślny identyfikator URI wywołania zwrotnego można zmienić podczas konfigurowania oprogramowania pośredniczącego uwierzytelniania w usłudze Twitter za pośrednictwem dziedziczonej RemoteAuthenticationOptions.CallbackPath TwitterOptions właściwości klasy.

Przechowywanie klucza i wpisu tajnego interfejsu API użytkownika usługi Twitter

Przechowuj poufne ustawienia, takie jak klucz interfejsu API klienta usługi Twitter i wpis tajny za pomocą usługi Secret Manager. W tym przykładzie wykonaj następujące czynności:

  1. Zainicjuj projekt magazynu wpisów tajnych zgodnie z instrukcjami w artykule Włączanie magazynu wpisów tajnych.

  2. Zapisz ustawienia poufne w lokalnym magazynie wpisów tajnych przy użyciu kluczy Authentication:Twitter:ConsumerKey tajnych i Authentication:Twitter:ConsumerSecret:

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

Separator : nie współdziała z kluczami hierarchicznymi zmiennych środowiskowych na wszystkich platformach. Na przykład separator nie jest obsługiwany przez powłokę : Bash. Podwójne podkreślenie, __, to:

  • Jest obsługiwany przez wszystkie platformy.
  • Automatycznie zamieniono dwukropek na :.

Te tokeny można znaleźć na karcie Klucze i tokeny dostępu po utworzeniu nowej aplikacji twitter:

Konfigurowanie uwierzytelniania w usłudze Twitter

Dodaj usługę uwierzytelniania do elementu 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"];
    });

Przeciążenie AddAuthentication(IServiceCollection, String) ustawia DefaultScheme właściwość . Przeciążenie AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) umożliwia konfigurowanie opcji uwierzytelniania, które mogą służyć do konfigurowania domyślnych schematów uwierzytelniania w różnych celach. Kolejne wywołania AddAuthentication przesłonięcia wcześniej skonfigurowanych AuthenticationOptions właściwości.

AuthenticationBuilder metody rozszerzeń rejestrujące procedurę obsługi uwierzytelniania mogą być wywoływane tylko raz dla schematu uwierzytelniania. Istnieją przeciążenia, które umożliwiają konfigurowanie właściwości schematu, nazwy schematu i nazwy wyświetlanej.

Wielu dostawców uwierzytelniania

Gdy aplikacja wymaga wielu dostawców, należy połączyć metody rozszerzenia dostawcy za :AddAuthentication

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

Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie w usłudze Twitter, zobacz dokumentację interfejsu TwitterOptions API. Może to służyć do żądania różnych informacji o użytkowniku.

Zaloguj się przy użyciu usługi Twitter

Uruchom aplikację i wybierz pozycję Zaloguj się. Pojawi się opcja logowania się za pomocą usługi Twitter:

Wybranie pozycji Twitter przekierowuje do usługi Twitter na potrzeby uwierzytelniania:

Po wprowadzeniu poświadczeń usługi Twitter nastąpi przekierowanie z powrotem do witryny internetowej, w której można ustawić adres e-mail.

Teraz logujesz się przy użyciu poświadczeń usługi Twitter:

Przekazywanie dalej informacji o żądaniu za pomocą serwera proxy lub modułu równoważenia obciążenia

Jeśli aplikacja jest wdrażana za serwerem proxy lub modułem równoważenia obciążenia, niektóre z pierwotnych informacji o żądaniu mogą zostać przekazane dalej do aplikacji w nagłówkach żądania. Te informacje zazwyczaj obejmują bezpieczny schemat żądań (https), hosta i adres IP klienta. Aplikacje nie odczytują automatycznie tych nagłówków żądań, aby odnaleźć pierwotne informacje o żądaniu i z nich korzystać.

Schemat jest używany do generowania linków, które mają wpływ na przepływ uwierzytelniania przy użyciu zewnętrznych dostawców. W wyniku utraty bezpiecznego schematu (https) aplikacja generuje nieprawidłowe niezabezpieczone adresy URL przekierowania.

Użyj oprogramowania pośredniczącego przekazanych nagłówków, aby udostępnić pierwotne informacje o żądaniu do aplikacji w celu przetworzenia żądania.

Aby uzyskać więcej informacji, zobacz Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia.

Rozwiązywanie problemów

  • tylko ASP.NET Core 2.x: jeśli Identity nie skonfigurowano przez wywołanie services.AddIdentity metody w ConfigureServicesprogramie , próba uwierzytelnienia spowoduje wyświetlenie argumentuException: należy podać opcję "SignInScheme". Szablon projektu używany w tym przykładzie gwarantuje Identity , że jest skonfigurowany.
  • Jeśli baza danych lokacji nie została utworzona przez zastosowanie migracji początkowej, operacja bazy danych nie powiodła się podczas przetwarzania błędu żądania . Naciśnij pozycję Zastosuj migracje , aby utworzyć bazę danych i odświeżyć, aby kontynuować wklejenie błędu.

Następne kroki

  • W tym artykule pokazano, jak można uwierzytelnić się za pomocą usługi Twitter. Możesz stosować podobne podejście do uwierzytelniania z innymi dostawcami wymienionymi na poprzedniej stronie.

  • Po opublikowaniu witryny internetowej w aplikacji internetowej platformy Azure należy zresetować ją ConsumerSecret w portalu deweloperów usługi Twitter.

  • Authentication:Twitter:ConsumerKey Ustaw wartości i Authentication:Twitter:ConsumerSecret jako ustawienia aplikacji w witrynie Azure Portal. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.