Configurazione dell'account microsoft per l'accesso esterno con ASP.NET Core

Da Valeriy Novytskyy e Rick Anderson

Questo esempio illustra come consentire agli utenti di accedere con il proprio account Microsoft aziendale, dell'istituto di istruzione o personale usando il progetto ASP.NET Core 6.0 creato nella pagina precedente.

Creare l'app nel portale per sviluppatori Microsoft

Se non si ha un account Microsoft, selezionare Crea uno. Dopo l'accesso, si viene reindirizzati alla pagina Registrazioni app:

  • Selezionare Nuova registrazione
  • Immetti un valore per Nome.
  • Selezionare un'opzione per Tipi di account supportati.
    • Il MicrosoftAccount pacchetto supporta le registrazioni dell'app create con le opzioni "Account in qualsiasi directory organizzativa" o "Account in qualsiasi directory organizzativa e account Microsoft" per impostazione predefinita.
    • Per usare altre opzioni, impostare AuthorizationEndpoint e TokenEndpoint membri di MicrosoftAccountOptions usati per inizializzare l'autenticazione dell'account Microsoft sugli URL visualizzati nella pagina Endpoint della registrazione dell'app dopo la creazione (disponibile facendo clic su Endpoint nella pagina Panoramica ).
  • In URI di reindirizzamento immettere l'URL di sviluppo con /signin-microsoft l'aggiunta. Ad esempio: https://localhost:5001/signin-microsoft. Lo schema di autenticazione Microsoft configurato più avanti in questo esempio gestirà automaticamente le richieste in fase /signin-microsoft di route per implementare il flusso OAuth.
  • Selezionare Registra

Creare un segreto client

  • Nel riquadro sinistro selezionare Certificati e segreti.
  • In Segreti client selezionare Nuovo segreto client
    • Aggiungere una descrizione per il segreto client.
    • Seleziona il pulsante Aggiungi.
  • In Segreti client copiare il valore del segreto client.

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

Archiviare l'ID client Microsoft e il segreto

Archiviare impostazioni riservate, ad esempio l'ID applicazione Microsoft (client) disponibile nella pagina Panoramica della registrazione dell'app e del segreto client creato nella pagina Certificati e 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:Microsoft:ClientId segrete e Authentication:Microsoft:ClientSecret:

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

Configurare l'autenticazione dell'account Microsoft

Aggiungere il servizio di autenticazione a Program:

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

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
    });

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.

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

Accedere con l'account Microsoft

  • Eseguire l'app e selezionare Accedi. Viene visualizzata un'opzione per accedere con Microsoft.
  • Selezionare questa opzione per accedere con Microsoft. Si viene reindirizzati a Microsoft per l'autenticazione. Dopo aver eseguito l'accesso con l'account Microsoft, verrà richiesto di consentire all'app di accedere alle informazioni:
  • Selezionare . Si viene reindirizzati al sito Web in cui è possibile impostare il messaggio di posta elettronica.

A questo momento si è connessi usando le credenziali Microsoft.

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 => { ... });

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

  • Se il provider di account Microsoft reindirizza l'utente a una pagina di errore di accesso, prendere nota del titolo dell'errore e dei parametri della stringa di query della descrizione direttamente dopo ( # hashtag) nell'URI.

    Anche se il messaggio di errore sembra indicare un problema con l'autenticazione Microsoft, la causa più comune è l'URI dell'applicazione che non corrisponde ad alcuno degli URI di reindirizzamento specificati per la piattaforma Web .

  • 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 che questa operazione venga eseguita.

  • 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 Microsoft. È 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, creare un nuovo segreto client nel portale per sviluppatori Microsoft.
  • Impostare le impostazioni dell'applicazione Authentication:Microsoft:ClientId e Authentication:Microsoft:ClientSecret nella portale di Azure. Il sistema di configurazione è configurato per leggere le chiavi dalle variabili di ambiente.

Questo esempio illustra come consentire agli utenti di accedere con il proprio account Microsoft aziendale, dell'istituto di istruzione o personale usando il progetto ASP.NET Core 3.0 creato nella pagina precedente.

Creare l'app nel portale per sviluppatori Microsoft

Se non si ha un account Microsoft, selezionare Crea uno. Dopo l'accesso, si viene reindirizzati alla pagina Registrazioni app:

  • Selezionare Nuova registrazione
  • Immetti un valore per Nome.
  • Selezionare un'opzione per Tipi di account supportati.
    • Il MicrosoftAccount pacchetto supporta le registrazioni dell'app create con le opzioni "Account in qualsiasi directory organizzativa" o "Account in qualsiasi directory organizzativa e account Microsoft" per impostazione predefinita.
    • Per usare altre opzioni, impostare AuthorizationEndpoint e TokenEndpoint membri di MicrosoftAccountOptions usati per inizializzare l'autenticazione dell'account Microsoft sugli URL visualizzati nella pagina Endpoint della registrazione dell'app dopo la creazione (disponibile facendo clic su Endpoint nella pagina Panoramica ).
  • In URI di reindirizzamento immettere l'URL di sviluppo con /signin-microsoft l'aggiunta. Ad esempio: https://localhost:5001/signin-microsoft. Lo schema di autenticazione Microsoft configurato più avanti in questo esempio gestirà automaticamente le richieste in fase /signin-microsoft di route per implementare il flusso OAuth.
  • Selezionare Registra

Creare un segreto client

  • Nel riquadro sinistro selezionare Certificati e segreti.
  • In Segreti client selezionare Nuovo segreto client
    • Aggiungere una descrizione per il segreto client.
    • Seleziona il pulsante Aggiungi.
  • In Segreti client copiare il valore del segreto client.

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

Archiviare l'ID client Microsoft e il segreto

Archiviare impostazioni riservate, ad esempio l'ID applicazione Microsoft (client) disponibile nella pagina Panoramica della registrazione dell'app e del segreto client creato nella pagina Certificati e 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:Microsoft:ClientId segrete e Authentication:Microsoft:ClientSecret:

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

Configurare l'autenticazione dell'account Microsoft

Aggiungere il servizio account Microsoft 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().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });
}

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.

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

Accedere con l'account Microsoft

Eseguire l'app e selezionare Accedi. Viene visualizzata un'opzione per accedere con Microsoft. Quando si seleziona Microsoft, si viene reindirizzati a Microsoft per l'autenticazione. Dopo aver eseguito l'accesso con l'account Microsoft, verrà richiesto di consentire all'app di accedere alle informazioni:

Toccare e si verrà reindirizzati al sito Web in cui è possibile impostare il messaggio di posta elettronica.

A questo momento si è connessi usando le credenziali Microsoft.

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 => { ... });

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

  • Se il provider di account Microsoft reindirizza l'utente a una pagina di errore di accesso, prendere nota del titolo dell'errore e dei parametri della stringa di query della descrizione direttamente dopo ( # hashtag) nell'URI.

    Anche se il messaggio di errore sembra indicare un problema con l'autenticazione Microsoft, la causa più comune è l'URI dell'applicazione che non corrisponde ad alcuno degli URI di reindirizzamento specificati per la piattaforma Web .

  • 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 che questa operazione venga eseguita.

  • 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 Microsoft. È 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, creare un nuovo segreto client nel portale per sviluppatori Microsoft.
  • Impostare le impostazioni dell'applicazione Authentication:Microsoft:ClientId e Authentication:Microsoft:ClientSecret nella portale di Azure. Il sistema di configurazione è configurato per leggere le chiavi dalle variabili di ambiente.