Konfiguration av extern inloggning för Microsoft-konto med ASP.NET Core
Av Valeriy Novytskyy och Rick Anderson
Det här exemplet visar hur du gör det möjligt för användare att logga in med sitt arbets-, skol- eller personliga Microsoft-konto med hjälp av ASP.NET Core-projektet som skapades på föregående sida.
Skapa appen i administrationscentret för Microsoft Entra
- Lägg till Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet-paketet i projektet.
- Registrera programmet i administrationscentret för Microsoft Entra genom att följa stegen i Registrera ett program med Microsofts identitetsplattform
Skapa en klienthemlighet
Generera en klienthemlighet i administrationscentret för Microsoft Entra genom att följa stegen i Registrera ett program med Microsofts identitetsplattform: Lägg till autentiseringsuppgifter.
Lagra Microsofts klient-ID och hemlighet
Lagra känsliga inställningar som Microsoft Application (klient)-ID och klienthemlighet som skapades i föregående steg med Secret Manager. Använd följande steg för det här exemplet:
Initiera projektet för hemlig lagring enligt anvisningarna i Aktivera hemlig lagring.
Lagra de känsliga inställningarna i den lokala hemlighetsbutiken med hemliga nycklar
Authentication:Microsoft:ClientId
ochAuthentication:Microsoft:ClientSecret
.<client-id>
visas på bladet Azure App-registreringar under program-ID (klient)-ID.<client-secret>
listas under Certifikat & hemligheter som Värde, inte Hemlig ID.dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
Den :
avgränsaren fungerar inte med hierarkiska nycklar för miljövariabler på alla plattformar. För exempelvis stöds inte avgränsaren :
av Bash. Det dubbla understrecket, __
, är:
- Stöds av alla plattformar.
- Ersätts automatiskt av ett kolon,
:
.
Konfigurera Microsoft-kontoautentisering
Lägg till autentiseringstjänsten i Program
:
builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
Överladdningen AddAuthentication(IServiceCollection, String) sätter egenskapen DefaultScheme. Med AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) överlagring kan du konfigurera autentiseringsalternativ, som kan användas för att konfigurera standardautentiseringsscheman för olika syften. Efterföljande anrop till AddAuthentication
åsidosätter tidigare konfigurerade AuthenticationOptions-egenskaper.
AuthenticationBuilder tilläggsmetoder som registrerar en autentiseringshanterare kan bara anropas en gång per autentiseringsschema. Det finns överlagringar som gör det möjligt att konfigurera schemaegenskaper, schemanamn och visningsnamn.
Mer information om konfigurationsalternativ som stöds av Microsoft-kontoautentisering finns i referensen för MicrosoftAccountOptions API. Detta kan användas för att begära annan information om användaren.
Logga in med Microsoft-konto
- Kör appen och välj Logga in. Ett alternativ för att logga in med Microsoft visas.
- Välj att logga in med Microsoft för att gå till Microsoft för autentisering. När du har loggat in med ditt Microsoft-konto uppmanas du att låta appen komma åt din information:
- Välj Ja för att gå tillbaka till webbplatsen där du vill ange din e-post.
Nu är du inloggad med dina Microsoft-autentiseringsuppgifter.
Flera autentiseringsprovidrar
När appen kräver flera leverantörer kedjar du ihop providertilläggsmetoderna bakom AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Vidarebefordra information om begäran med en proxy eller lastbalanserare
Om appen distribueras bakom en proxyserver eller lastbalanserare kan en del av den ursprungliga begärandeinformationen vidarebefordras till appen i begärandehuvuden. Den här informationen omfattar vanligtvis schemat för säker begäran (https
), värd och klientens IP-adress. Appar läser inte automatiskt dessa begärandehuvuden för att identifiera och använda den ursprungliga begärandeinformationen.
Schemat används i länkgenerering som påverkar autentiseringsflödet med externa leverantörer. Att förlora det säkra schemat (https
) resulterar i att appen genererar felaktiga osäkra omdirigerings-URL:er.
Använd middleware för vidarebefordrade rubriker för att göra den ursprungliga begärandeinformationen tillgänglig för appen vid behandling av förfrågningar.
Mer information finns i Konfigurera ASP.NET Core att fungera med proxyservrar och lastbalanserare.
Felsökning
Om Microsoft-kontoprovidern omdirigerar till en inloggningsfelsida, noterar du frågesträngsparametrarna för felrubriken och beskrivningen direkt efter
#
(hashtagg) i URL:en.Även om felmeddelandet verkar tyda på ett problem med Microsoft-autentisering är den vanligaste orsaken att program-URI:n inte matchar någon av de omdirigerings-URI:er som angetts för Web-plattformen.
Om Identity inte har konfigurerats genom att anropa
services.AddIdentity
iConfigureServices
resulterar det i att försök att autentisera leder till ArgumentException: Alternativet 'SignInScheme' måste anges. Projektmallen som används i det här exemplet säkerställer att detta görs.Om platsdatabasen inte har skapats genom att tillämpa den första migreringen, så uppstår fel : En databasåtgärd misslyckades när begäran bearbetades. Tryck på Använd migreringar för att skapa databasen och uppdatera för att fortsätta förbi felet.
Nästa steg
- Den här artikeln visade hur du autentiserar med Microsoft. Följ en liknande metod för att autentisera med andra leverantörer som visas på föregående sida.
- När webbplatsen har publicerats till Azure-webbappen skapar du en ny klienthemlighet i administrationscentret för Microsoft Entra.
- Ange
Authentication:Microsoft:ClientId
ochAuthentication:Microsoft:ClientSecret
som programinställningar i administrationscentret för Microsoft Entra. Konfigurationssystemet är konfigurerat för att läsa nycklar från miljövariabler.
Det här exemplet visar hur du gör det möjligt för användare att logga in med sitt arbets-, skol- eller personliga Microsoft-konto med hjälp av projektet ASP.NET Core 3.0 som skapades på föregående sida.
Skapa appen i administrationscentret för Microsoft Entra
- Lägg till Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet-paketet i projektet.
- Registrera programmet i administrationscentret för Microsoft Entra genom att följa stegen i Registrera ett program med Microsofts identitetsplattform
Skapa klienthemlighet
Generera en klienthemlighet i administrationscentret för Microsoft Entra genom att följa stegen i Registrera ett program med Microsofts identitetsplattform: Lägg till autentiseringsuppgifter.
Lagra Microsofts klient-ID och hemlighet
Lagra känsliga inställningar som Microsoft Application (klient)-ID:t och klienthemlighet du skapade i föregående steg med Secret Manager. Använd följande steg för det här exemplet:
Initiera projektet för hemlig lagring enligt anvisningarna i Aktivera hemlig lagring.
Spara de känsliga inställningarna i det lokala hemliga lagringsutrymmet med nycklarna
Authentication:Microsoft:ClientId
ochAuthentication:Microsoft:ClientSecret
:dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
Den :
avgränsaren fungerar inte med hierarkiska nycklar för miljövariabler på alla plattformar. Den :
avgränsaren stöds till exempel inte av Bash. Det dubbla understrecket, __
, är:
- Stöds av alla plattformar.
- Ersätts automatiskt av ett kolon,
:
.
Konfigurera Microsoft-kontoautentisering
Lägg till Microsoft-kontotjänsten i 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"];
});
}
Överlagringen AddAuthentication(IServiceCollection, String) anger egenskapen DefaultScheme. Med AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) överlagring kan du konfigurera autentiseringsalternativ, som kan användas för att konfigurera standardautentiseringsscheman för olika syften. Efterföljande anrop till AddAuthentication
åsidosätter tidigare konfigurerade egenskaper för AuthenticationOptions.
AuthenticationBuilder tilläggsmetoder som registrerar en autentiseringshanterare kan bara anropas en gång per autentiseringsschema. Det finns överlagringar som gör det möjligt att konfigurera schemaegenskaper, schemanamn och visningsnamn.
Mer information om konfigurationsalternativ som stöds av Microsoft-kontoautentisering finns i referensen för MicrosoftAccountOptions API. Detta kan användas för att begära annan information om användaren.
Logga in med Microsoft-konto
Kör appen och välj Logga in. Ett alternativ för att logga in med Microsoft visas. Välj Microsoft för att gå till Microsoft för autentisering. När du har loggat in med ditt Microsoft-konto uppmanas du att låta appen komma åt din information:
Tryck på Ja så omdirigeras du tillbaka till webbplatsen där du kan ange din e-post.
Nu är du inloggad med dina Microsoft-autentiseringsuppgifter.
Flera autentiseringsprovidrar
När appen kräver flera leverantörer kedjar du providertilläggsmetoderna bakom AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Vidarebefordra information om begäran med en proxy eller lastbalanserare
Om appen distribueras bakom en proxyserver eller lastbalanserare kan en del av den ursprungliga begärandeinformationen vidarebefordras till appen i begärandehuvuden. Den här informationen omfattar vanligtvis schemat för säker begäran (https
), värd och klientens IP-adress. Appar läser inte automatiskt dessa begärandehuvuden för att identifiera och använda den ursprungliga begärandeinformationen.
Schemat används i länkgenerering som påverkar autentiseringsflödet med externa leverantörer. Förlust av det säkra schemat (https
) leder till att appen genererar felaktiga osäkra omdirigerings-URL:er.
Använd middleware för vidarebefordrade rubriker för att göra den ursprungliga förfrågningsinformationen tillgänglig för appen vid bearbetning av förfrågningar.
Mer information finns i Konfigurera ASP.NET Core att fungera med proxyservrar och lastbalanserare.
Felsökning
Om Microsoft-kontoprovidern omdirigerar dig till en inloggningsfelsida noterar du frågesträngsparametrarna för felrubriken och beskrivningen direkt efter
#
(hashtagg) i URI:n.Även om felmeddelandet verkar tyda på ett problem med Microsoft-autentisering är den vanligaste orsaken att program-URI:n inte matchar någon av de omdirigerings-URI:er som angetts för Web-plattformen.
Om Identity inte har konfigurerats genom att anropa
services.AddIdentity
iConfigureServices
, kommer ett försök att autentisera resultera i ArgumentException: Alternativet 'SignInScheme' måste anges. Projektmallen som används i det här exemplet säkerställer att detta görs.Om platsdatabasen inte har skapats genom att tillämpa den första migreringen får du En databasåtgärd misslyckades när begäran bearbetades fel. Tryck på Använd migreringar för att skapa databasen och uppdatera för att fortsätta förbi felet.
Nästa steg
- Den här artikeln visade hur du kan autentisera med Microsoft. Du kan följa en liknande metod för att autentisera med andra leverantörer som anges på föregående sida.
- När du har publicerat webbplatsen till Azure-webbappen skapar du en ny klienthemlighet i administrationscentret för Microsoft Entra.
- Ange
Authentication:Microsoft:ClientId
ochAuthentication:Microsoft:ClientSecret
som programinställningar i administrationscentret för Microsoft Entra. Konfigurationssystemet är konfigurerat för att läsa nycklar från miljövariabler.
ASP.NET Core