Configurazione dell'account microsoft per l'accesso esterno con ASP.NET Core
Di 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 creato nella pagina precedente.
Creare l'app nell'interfaccia di amministrazione di Microsoft Entra
- Aggiungere il pacchetto NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount al progetto.
- Registrare l'applicazione nell'interfaccia di amministrazione di Microsoft Entra seguendo la procedura descritta in Registrare un'applicazione con Microsoft Identity Platform
Creare un segreto del client
Generare un segreto client nell'interfaccia di amministrazione di Microsoft Entra seguendo i passaggi descritti in Registrare un'applicazione con Microsoft Identity Platform: Aggiungere credenziali.
Archiviare l'ID client Microsoft e il segreto
Archivia impostazioni riservate, come l'ID applicazione (client) di Microsoft e il segreto client creato nel passaggio precedente con Secret Manager . Per questo esempio, seguire questa procedura:
Inizializzare il progetto per l'archiviazione privata in base alle istruzioni in Abilitare l'archiviazione privata.
Archiviare le impostazioni sensibili nell'archivio segreto locale con le chiavi segrete
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
. Il<client-id>
è elencato nel pannello delle registrazioni app di Azure sotto ID applicazione (client). Il<client-secret>
è elencato sotto Certificati & segreti come il valore , non l'ID segreto .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 gerarchica delle variabili di ambiente in tutte le piattaforme. Ad esempio, il separatore di :
non è supportato da Bash. Il doppio carattere di sottolineatura, __
, è:
- Supportato da tutte le piattaforme.
- Sostituito automaticamente da due punti,
:
.
Configurare l'autenticazione dell'account Microsoft
Aggiungere il servizio di autenticazione al Program
:
builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
L'overload AddAuthentication(IServiceCollection, String) imposta la proprietà DefaultScheme. 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. Le chiamate successive a AddAuthentication
sostituiscono le proprietà AuthenticationOptions configurate in precedenza.
AuthenticationBuilder metodi di estensione che registrano un gestore di autenticazione possono essere chiamati una sola volta per ogni schema di autenticazione. Esistono sovraccarichi 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 API di MicrosoftAccountOptions. Può essere usato per richiedere informazioni diverse sull'utente.
Accedere con l'account Microsoft
- Avvia l'applicazione e seleziona Accedi. Viene visualizzata un'opzione per accedere con Microsoft.
- Per eseguire l'accesso, selezionare Microsoft per navigare alla pagina di autenticazione di Microsoft. Dopo aver eseguito l'accesso con l'account Microsoft, verrà richiesto di consentire all'app di accedere alle informazioni:
- Selezionare Sì per tornare al sito Web in cui impostare il messaggio di posta elettronica.
Ora sei connesso utilizzando le credenziali Microsoft.
Multipli provider di autenticazione
Quando l'app richiede più provider, concatenare i metodi di estensione dei provider in successione a AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Inoltrare le informazioni sulle richieste 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 di richiesta originali potrebbero essere inoltrate all'app nelle intestazioni della richiesta. Queste informazioni in genere includono lo schema di richiesta sicura (https
), l'host e l'indirizzo IP client. Le app non leggono automaticamente queste intestazioni di richiesta per individuare e usare le informazioni di richiesta originali.
Lo schema viene usato nella generazione di collegamenti che influisce sul flusso di autenticazione con provider esterni. La perdita dello schema sicuro (https
) comporta la generazione di URL di reindirizzamento non sicuri non corretti nell'app.
Usa il middleware delle intestazioni inoltrate per rendere disponibili le informazioni di richiesta originali all'app per l'elaborazione delle richieste.
Per altre informazioni, vedere Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico.
Risoluzione dei problemi
Se il provider di account Microsoft reindirizza a una pagina di errore di accesso, annotare il titolo dell'errore e la descrizione tra i parametri della stringa di query direttamente dopo il
#
(hashtag) nell'URI.Anche se il messaggio di errore sembra indicare un problema con l'autenticazione Microsoft, la causa più comune è che l'URI dell'applicazione non corrisponde ad alcuno degli URI di reindirizzamento specificati per la piattaforma Web.
Se Identity non è configurato chiamando
services.AddIdentity
inConfigureServices
, il tentativo di autenticazione comporterà ArgumentException: l'opzione 'SignInScheme' deve essere fornita. 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 verifica un'operazione di database non riuscita durante l'elaborazione della richiesta errore. Toccare Applica migrazioni per creare il database e aggiorna la pagina per superare l'errore.
Passaggi successivi
- Questo articolo ha illustrato come eseguire l'autenticazione con Microsoft. Seguire un approccio simile per l'autenticazione con altri provider elencati nella pagina precedente .
- Dopo la pubblicazione del sito Web nell'app Web di Azure, creare nuovi segreti client nel centro di amministrazione di Microsoft Entra.
- Impostare
Authentication:Microsoft:ClientId
eAuthentication:Microsoft:ClientSecret
come impostazioni dell'applicazione nel centro di amministrazione di Microsoft Entra. 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 nell'interfaccia di amministrazione di Microsoft Entra
- Aggiungere il pacchetto NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount al progetto.
- Registrare l'applicazione nell'interfaccia di amministrazione di Microsoft Entra seguendo la procedura descritta in Registrare un'applicazione con Microsoft Identity Platform
Creare il segreto del client
Generare un segreto client nell'interfaccia di amministrazione di Microsoft Entra seguendo i passaggi descritti in Registrare un'applicazione con Microsoft Identity Platform: Aggiungere credenziali.
Archiviare l'ID client Microsoft e il segreto
Archiviare le impostazioni riservate, ad esempio l'ID applicazione Microsoft (client) e il segreto client creato nel passaggio precedente con Secret Manager . Per questo esempio, seguire questa procedura:
Inizializzare il progetto per l'archiviazione privata in base alle istruzioni in Abilitare l'archiviazione privata.
Archiviare le impostazioni riservate nell'archivio segreto locale con le chiavi segrete
Authentication:Microsoft:ClientId
eAuthentication: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 gerarchica delle variabili di ambiente in tutte le piattaforme. Ad esempio, il separatore di :
non è supportato da Bash. Il doppio carattere di sottolineatura, __
, è:
- Supportato da tutte le piattaforme.
- Sostituito automaticamente dai due punti,
:
.
Configurare l'autenticazione dell'account Microsoft
Aggiungi il servizio di account Microsoft al 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"];
});
}
Il sovraccarico AddAuthentication(IServiceCollection, String) imposta la proprietà DefaultScheme. 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. Le chiamate successive a AddAuthentication
sostituiscono le proprietà AuthenticationOptions configurate in precedenza.
AuthenticationBuilder metodi di estensione che registrano un gestore di autenticazione possono essere chiamati una sola volta per ogni schema di autenticazione. Esistono sovraccarichi che permettono 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 API di MicrosoftAccountOptions. Può essere usato per richiedere informazioni diverse sull'utente.
Accedere con l'account Microsoft
Avvia l'app e seleziona Accedi. Viene visualizzata un'opzione per accedere con Microsoft. Selezionare Microsoft per passare 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 Sì e si verrà reindirizzati di nuovo al sito Web in cui è possibile impostare il messaggio di posta elettronica.
Ora hai eseguito l'accesso utilizzando le credenziali Microsoft.
Diversi provider di autenticazione
Quando l'app richiede più provider, dev'è catenare i metodi di estensione del provider in successione a AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Inoltrare le informazioni sulle richieste 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 di richiesta originali potrebbero essere inoltrate all'app nelle intestazioni della richiesta. Queste informazioni in genere includono lo schema di richiesta sicura (https
), l'host e l'indirizzo IP client. Le app non leggono automaticamente queste intestazioni di richiesta per individuare e usare le informazioni di richiesta originali.
Lo schema viene usato nella generazione di collegamenti che influisce sul flusso di autenticazione con provider esterni. La perdita dello schema sicuro (https
) comporta la generazione di URL di reindirizzamento non sicuri non corretti nell'app.
Usa il middleware di inoltro delle intestazioni per rendere disponibili all'app le informazioni originali della richiesta per l'elaborazione delle richieste.
Per altre informazioni, vedere Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico.
Risoluzione dei problemi
Se il provider dell'account Microsoft reindirizza l'utente a una pagina di errore di accesso, annotare il titolo dell'errore e i parametri della query string relativi alla descrizione successivi al
#
(hashtag) nell'URI.Anche se il messaggio di errore sembra indicare un problema con l'autenticazione Microsoft, la causa più comune è che l'URI dell'applicazione non corrisponde ad alcuno degli URI di reindirizzamento specificati per la piattaforma Web.
Se Identity non è configurato chiamando
services.AddIdentity
inConfigureServices
, il tentativo di autenticazione comporterà ArgumentException: l'opzione 'SignInScheme' deve essere fornita. 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 della richiesta errore. Toccare Applica Migrazioni per creare il database e aggiornare la pagina per superare 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 nuovi segreti client nell'interfaccia di amministrazione di Microsoft Entra.
- Impostare le
Authentication:Microsoft:ClientId
e leAuthentication:Microsoft:ClientSecret
come impostazioni dell'applicazione nell'interfaccia di amministrazione di Microsoft Entra. Il sistema di configurazione è configurato per leggere le chiavi dalle variabili di ambiente.