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:
Zainicjuj projekt magazynu wpisów tajnych zgodnie z instrukcjami w artykule Włączanie magazynu wpisów tajnych.
Zapisz ustawienia poufne w lokalnym magazynie wpisów tajnych przy użyciu kluczy
Authentication:Twitter:ConsumerKey
tajnych iAuthentication: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 wConfigureServices
programie , 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 iAuthentication:Twitter:ConsumerSecret
jako ustawienia aplikacji w witrynie Azure Portal. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.