Condividi tramite


Configurazione dell'accesso esterno di Twitter con ASP.NET Core

Da Valeriy Novytskyy e Rick Anderson

Questo esempio illustra come consentire agli utenti di accedere con il proprio account Twitter usando un esempio ASP.NET progetto Core creato nella pagina precedente.

Nota

Il pacchetto Microsoft.AspNetCore.Authentication.Twitter descritto di seguito usa le API OAuth 1.0 fornite da Twitter. Twitter ha aggiunto le API OAuth 2.0 con un set di funzionalità diverso. I pacchetti OpenIddict e AspNet.Security.OAuth.Twitter sono implementazioni della community che usano le nuove API OAuth 2.0.

Creare l'app in Twitter

  • Aggiungere il pacchetto NuGet Microsoft.AspNetCore.Authentication.Twitter al progetto.

  • Passare al dashboard del portale per sviluppatori di Twitter e accedere. Se non si ha già un account Twitter, usare il collegamento Iscriviti ora per crearne uno.

  • Se non si ha un progetto, crearne uno.

  • Selezionare + Aggiungi app. Compilare il nome dell'app e quindi registrare la chiave API generata, il segreto della chiave API e il token di connessione. Questi saranno necessari in un secondo momento.

  • Nella pagina App Impostazioni selezionare Modifica nella sezione Impostazioni di autenticazione e quindi:

    • Abilitare OAuth a 3 zampe
    • Richiedere l'indirizzo di posta elettronica dagli utenti
    • Compilare i campi obbligatori e selezionare Salva

    Nota

    Microsoft.AspNetCore.Identity richiede agli utenti di avere un indirizzo di posta elettronica per impostazione predefinita. Per gli URL di callback durante lo sviluppo, usare https://localhost:{PORT}/signin-twitter, dove il {PORT} segnaposto è la porta dell'app.

    Nota

    Il segmento /signin-twitter URI viene impostato come callback predefinito del provider di autenticazione Twitter. È possibile modificare l'URI di callback predefinito durante la configurazione del middleware di autenticazione di Twitter tramite la proprietà ereditata RemoteAuthenticationOptions.CallbackPath della TwitterOptions classe .

Archiviare la chiave API del consumer Twitter e il segreto

Archiviare impostazioni riservate, ad esempio la chiave API consumer di Twitter e il segreto con Secret Manager. Per questo esempio, seguire questa procedura:

  1. Inizializzare il progetto per l'archiviazione privata in base alle istruzioni in Abilitare l'archiviazione privata.

  2. Archiviare le impostazioni riservate nell'archivio segreto locale con le chiavi Authentication:Twitter:ConsumerKey dei segreti e Authentication:Twitter:ConsumerSecret:

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

Il separatore : non funziona con le chiavi gerarchiche delle variabili di ambiente in tutte le piattaforme. __, il doppio carattere di sottolineatura, è:

  • Supportato da tutte le piattaforme. Ad esempio, il separatore : non è supportato da Bash, ma __ è supportato.
  • Sostituito automaticamente da un :

Questi token sono disponibili nella scheda Chiavi e token di accesso dopo aver creato una nuova applicazione Twitter:

Configurare l'autenticazione di Twitter

Aggiungere il servizio di autenticazione a 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"];
    });

L'overload AddAuthentication(IServiceCollection, String) imposta la DefaultScheme proprietà . L'overload AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) consente di configurare le opzioni di autenticazione, che possono essere usate per configurare schemi di autenticazione predefiniti per scopi diversi. Chiamate successive per eseguire l'override AddAuthentication delle proprietà configurate AuthenticationOptions in precedenza.

AuthenticationBuilder I metodi di estensione che registrano un gestore di autenticazione possono essere chiamati una sola volta per ogni schema di autenticazione. Esistono overload che consentono di configurare le proprietà dello schema, il nome dello schema e il nome visualizzato.

Più provider di autenticazione

Quando l'app richiede più provider, concatenare i metodi di estensione del provider dietro AddAuthentication:

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

Per altre informazioni sulle opzioni di configurazione supportate dall'autenticazione di Twitter, vedere le informazioni di riferimento sulle TwitterOptions API. Può essere usato per richiedere informazioni diverse sull'utente.

Accedere con Twitter

Eseguire l'app e selezionare Accedi. Viene visualizzata un'opzione per accedere con Twitter:

Selezionando Twitter reindirizza a Twitter per l'autenticazione:

Dopo aver immesso le credenziali di Twitter, si viene reindirizzati al sito Web in cui è possibile impostare il messaggio di posta elettronica.

A questo momento è stato eseguito l'accesso usando le credenziali di Twitter:

Inoltrare informazioni della richiesta con un proxy o un servizio di bilanciamento del carico

Se l'app viene distribuita dietro un server proxy o un servizio di bilanciamento del carico, alcune delle informazioni della richiesta originale possono essere inoltrate all'app nelle intestazioni della richiesta. Queste informazioni includono in genere lo schema della richiesta sicura (https), l'host e l'indirizzo IP del client. Le app non leggono automaticamente queste intestazioni della richiesta per individuare e usare le informazioni della richiesta originale.

Lo schema viene usato nella generazione di collegamenti che influisce sul flusso di autenticazione con provider esterni. La perdita dello schema sicuro (https) fa sì che l'app generi URL di reindirizzamento non sicuri e non corretti.

Usare il middleware delle intestazioni inoltrate per rendere disponibili per l'app le informazioni della richiesta originale per l'elaborazione delle richieste.

Per altre informazioni, vedere Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico.

Risoluzione dei problemi

  • ASP.NET Solo Core 2.x: se Identity non è configurato chiamando services.AddIdentity in ConfigureServices, il tentativo di autenticazione comporterà ArgumentException: è necessario specificare l'opzione 'SignInScheme'. Il modello di progetto usato in questo esempio garantisce la Identity configurazione.
  • Se il database del sito non è stato creato applicando la migrazione iniziale, si otterrà un'operazione di database non riuscita durante l'elaborazione dell'errore di richiesta . Toccare Applica migrazioni per creare il database e aggiornare per continuare oltre l'errore.

Passaggi successivi

  • Questo articolo ha illustrato come eseguire l'autenticazione con Twitter. È possibile seguire un approccio simile per l'autenticazione con altri provider elencati nella pagina precedente.

  • Dopo aver pubblicato il sito Web nell'app Web di Azure, è necessario reimpostare nel ConsumerSecret portale per sviluppatori di Twitter.

  • Impostare le impostazioni dell'applicazione Authentication:Twitter:ConsumerKey e Authentication:Twitter:ConsumerSecret nella portale di Azure. Il sistema di configurazione è configurato per leggere le chiavi dalle variabili di ambiente.