Nastavení externího přihlašování na Twitteru pomocí ASP.NET Core

Autoři: Valerij Novytskyj a Rick Anderson

Tato ukázka ukazuje, jak uživatelům umožnit přihlášení pomocí svého twitterového účtu pomocí ukázkového projektu ASP.NET Core vytvořeného na předchozí stránce.

Poznámka:

Balíček Microsoft.AspNetCore.Authentication.Twitter popsaný níže používá rozhraní API OAuth 1.0 poskytovaná Twitterem. Twitter od té doby přidal rozhraní API OAuth 2.0 s jinou sadou funkcí. Balíčky OpenIddict a AspNet.Security.OAuth.Twitter jsou komunitní implementace, které používají nová rozhraní API OAuth 2.0.

Vytvoření aplikace na Twitteru

  • Přidejte do projektu balíček NuGet Microsoft.AspNetCore.Authentication.Twitter .

  • Přejděte na řídicí panel portálu pro vývojáře twitteru a přihlaste se. Pokud ještě nemáte účet Twitteru, vytvořte ho pomocí odkazu Pro registraci .

  • Pokud projekt nemáte, vytvořte ho.

  • Vyberte + Přidat aplikaci. Vyplňte název aplikace a potom nahrajte vygenerovaný klíč rozhraní API, tajný klíč rozhraní API a nosný token. Ty budou potřeba později.

  • Na stránce Nastavení aplikace vyberte v části Nastavení ověřování možnost Upravita pak:

    • Povolení 3 leggovaného OAuth
    • Žádost o e-mailovou adresu od uživatelů
    • Vyplňte požadovaná pole a vyberte Uložit.

    Poznámka:

    Microsoft.AspNetCore.Identity Vyžaduje, aby uživatelé měli ve výchozím nastavení e-mailovou adresu. Pro adresy URL zpětného volání během vývoje použijte https://localhost:{PORT}/signin-twittermísto, kde {PORT} zástupný symbol představuje port aplikace.

    Poznámka:

    Segment /signin-twitter identifikátoru URI je nastavený jako výchozí zpětné volání zprostředkovatele ověřování Twitteru. Výchozí identifikátor URI zpětného volání můžete změnit při konfiguraci middlewaru ověřování Twitteru prostřednictvím zděděné RemoteAuthenticationOptions.CallbackPath vlastnosti TwitterOptions třídy.

Uložení klíče a tajného klíče rozhraní API pro příjemce Twitteru

Uložte citlivá nastavení, jako je klíč rozhraní API pro příjemce Twitteru a tajný klíč pomocí Secret Manageru. Pro tuto ukázku použijte následující kroky:

  1. Inicializuje projekt pro úložiště tajných kódů podle pokynů v části Povolit úložiště tajných kódů.

  2. Uložte citlivá nastavení v místním úložišti tajných kódů pomocí klíčů tajných klíčů Authentication:Twitter:ConsumerKey a Authentication:Twitter:ConsumerSecret:

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

Oddělovač : nefunguje s hierarchickými klíči proměnných prostředí na všech platformách. Dvojité podtržítko (__) se:

  • Podporuje všemi platformami. Například Bash nepodporuje oddělovač :, ale oddělovač __ ano.
  • Automaticky nahrazeno dvojtečkou (:).

Tyto tokeny najdete na kartě Klíče a přístupové tokeny po vytvoření nové aplikace Twitter:

Konfigurace ověřování Twitteru

Přidejte ověřovací službu do 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"];
    });

Přetížení AddAuthentication(IServiceCollection, String) nastaví DefaultScheme vlastnost. Přetížení AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) umožňuje konfigurovat možnosti ověřování, které lze použít k nastavení výchozích schémat ověřování pro různé účely. Další volání k AddAuthentication přepsání dříve nakonfigurovaných AuthenticationOptions vlastností

AuthenticationBuilder metody rozšíření, které registrují obslužnou rutinu ověřování, mohou být volána pouze jednou pro každé schéma ověřování. Existují přetížení, která umožňují konfigurovat vlastnosti schématu, název schématu a zobrazovaný název.

Několik zprostředkovatelů ověřování

Pokud aplikace vyžaduje více poskytovatelů, zřetězte metody rozšíření poskytovatele za AddAuthentication:

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

Další informace o možnostech konfigurace podporovaných ověřováním Twitteru najdete v referenčních informacích k TwitterOptions rozhraní API. Můžete ho použít k vyžádání různých informací o uživateli.

Přihlášení pomocí Twitteru

Spusťte aplikaci a vyberte Přihlásit se. Zobrazí se možnost přihlášení pomocí Twitteru:

Výběr Twitteru přesměrovává na Twitter pro ověřování:

Po zadání přihlašovacích údajů twitteru budete přesměrováni zpět na web, kde můžete nastavit svůj e-mail.

Teď jste přihlášení pomocí svých přihlašovacích údajů twitteru:

Předávání informací o požadavcích pomocí proxy serveru nebo nástroje pro vyrovnávání zatížení

Pokud je aplikace nasazená za proxy serverem nebo nástrojem pro vyrovnávání zatížení, mohou se některé z původních informací o požadavku předávat do aplikace v hlavičce požadavku. Tyto informace obvykle zahrnují zabezpečené schéma požadavků (https), hostitele a IP adresu klienta. Aplikace tyto hlavičky požadavků nenačítají automaticky, aby zjistily a využily informace o původním požadavku.

Schéma se používá při generování odkazů, které ovlivňuje tok ověřování s externími zprostředkovateli. Ztráta zabezpečeného schématu (https) způsobí, že aplikace generuje nesprávné a nezabezpečené adresy URL pro přesměrování.

Pomocí middlewaru Forwarded Headers zpřístupníte aplikaci informace o původním požadavku pro zpracování požadavků.

Další informace najdete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Řešení problému

  • ASP.NET pouze Core 2.x: Pokud Identity není nakonfigurováno voláním ConfigureServicesservices.AddIdentity , bude pokus o ověření výsledkem argumentException: Musí být zadána možnost SignInScheme. Šablona projektu použitá v této ukázce zajišťuje Identity konfiguraci.
  • Pokud se databáze lokality nevytvořila použitím počáteční migrace, při zpracování chyby požadavku se zobrazí operace databáze, která selhala. Klepnutím na Použít migrace vytvoříte databázi a aktualizujete ji, abyste mohli pokračovat po chybě.

Další kroky

  • Tento článek vám ukázal, jak se můžete ověřit pomocí Twitteru. Podobný přístup můžete použít k ověření u jiných poskytovatelů uvedených na předchozí stránce.

  • Po publikování webu do webové aplikace Azure byste měli resetovat ConsumerSecret portál pro vývojáře na Twitteru.

  • Na webu Azure Portal nastavte Authentication:Twitter:ConsumerKey a Authentication:Twitter:ConsumerSecret jako nastavení aplikace. Konfigurační systém je nastavený tak, aby načítal klíče z proměnných prostředí.