Configurazione dell'account di accesso esterno di Google in ASP.NET Core

Da Valeriy Novytskyy e Rick Anderson

Questa esercitazione illustra come consentire agli utenti di accedere con il proprio account Google usando il progetto ASP.NET Core creato nella pagina precedente.

Creare l'ID client e il segreto di Google OAuth 2.0

  • Seguire le indicazioni riportate in Integrazione di Google Sign-In nell'app Web (documentazione di Google).

  • Passare ad API e servizi Google.

  • Per prima cosa deve esistere un progetto , potrebbe essere necessario crearne uno. Dopo aver selezionato un progetto, immettere il dashboard.

  • Nella schermata di consenso Oauth del dashboard:

    • Selezionare Tipo utente - Esterno e CREA.
    • Nella finestra di dialogo Informazioni sull'app specificare un nome per l'app, l'indirizzo di posta elettronica del supporto utente e le informazioni di contatto per gli sviluppatori.
    • Eseguire il passaggio Ambiti .
    • Eseguire il passaggio Test users (Utenti di test).
    • Esaminare la schermata di consenso OAuth e tornare al dashboard dell'app.
  • Nella scheda Credenziali del dashboard dell'applicazione selezionare CREATE CREDENTIALS OAuth client ID (CREA CREDENZIALI>ID client OAuth).

  • Selezionare Application type Web application (Tipo di>applicazione Web), scegliere un nome.

  • Nella sezione URI di reindirizzamento autorizzati selezionare ADD URI per impostare l'URI di reindirizzamento. URI di reindirizzamento di esempio: https://localhost:{PORT}/signin-google, dove il {PORT} segnaposto è la porta dell'app.

  • Selezionare il pulsante CREA .

  • Salvare l'ID client e il segreto client da usare nella configurazione dell'app.

  • Quando si distribuisce il sito, eseguire una delle operazioni seguenti:

    • Aggiornare l'URI di reindirizzamento dell'app in Google Console all'URI di reindirizzamento distribuito dell'app.
    • Creare una nuova registrazione api Google in Google Console per l'app di produzione con il relativo URI di reindirizzamento di produzione.

Archiviare l'ID client Google e il segreto

Archiviare impostazioni riservate, ad esempio l'ID client Google e i valori dei segreti 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 sensibili nell'archivio segreto locale con le chiavi Authentication:Google:ClientId segrete e Authentication:Google:ClientSecret:

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-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 :

È possibile gestire le credenziali e l'utilizzo dell'API nella console API.

Configurare l'autenticazione di Google

Aggiungere il Microsoft.AspNetCore.Authentication.Google pacchetto NuGet all'app.

Aggiungere il servizio di autenticazione a Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection =
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });
}

Aggiungere il servizio di autenticazione a Program:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddGoogle(googleOptions =>
    {
        googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
        googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
    });

La chiamata a AddIdentity configura le impostazioni predefinite dello schema. 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.

Accedere con Google

  • Eseguire l'app e selezionare Accedi. Viene visualizzata un'opzione per accedere con Google.
  • Selezionare il pulsante Google che reindirizza a Google per l'autenticazione.
  • Dopo aver immesso le credenziali di Google, si viene reindirizzati al sito Web.

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.

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 Google, vedere le informazioni di riferimento sulle GoogleOptions API. Può essere usato per richiedere informazioni diverse sull'utente.

Modificare l'URI di callback predefinito

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

Risoluzione dei problemi

  • Se l'accesso non funziona e non si ricevono errori, passare alla modalità di sviluppo per semplificare il debug del problema.
  • Se Identity non è configurato chiamando services.AddIdentity in ConfigureServices, il tentativo di autenticare i risultati in ArgumentException: è necessario specificare l'opzione 'SignInScheme'. Il modello di progetto usato in questa esercitazione garantisce la Identity configurazione.
  • Se il database del sito non è stato creato applicando la migrazione iniziale, si ottiene un'operazione di database non riuscita durante l'elaborazione dell'errore di richiesta . Selezionare Applica migrazioni per creare il database e aggiornare la pagina per continuare oltre l'errore.
  • Errore HTTP 500 dopo aver autenticato correttamente la richiesta dal provider OAuth 2.0, ad esempio Google: vedere questo problema di GitHub.
  • Come implementare l'autenticazione esterna con Google per React e altre app spa: vedere questo problema di GitHub.

Passaggi successivi

  • Questo articolo ha illustrato come eseguire l'autenticazione con Google. È possibile seguire un approccio simile per l'autenticazione con altri provider elencati nella pagina precedente.
  • Dopo aver pubblicato l'app in Azure, reimpostare ClientSecret in Google API Console.
  • Impostare le impostazioni dell'applicazione Authentication:Google:ClientId e Authentication:Google:ClientSecret nella portale di Azure. Il sistema di configurazione è configurato per leggere le chiavi dalle variabili di ambiente.