Dela via


Extern providerautentisering i ASP.NET Core Identity

Av Valeriy Novytskyy och Rick Anderson

Den här självstudien visar hur du skapar en ASP.NET Core-app som gör det möjligt för användare att logga in med OAuth 2.0 med autentiseringsuppgifter från externa autentiseringsprovidrar.

Facebook, Twitter, Googleoch Microsoft providers beskrivs i följande avsnitt och använder startprojektet som skapats i den här artikeln. Andra leverantörer är tillgängliga i tredjepartspaket som OpenIddict, AspNet.Security.OAuth.Providers och AspNet.Security.OpenId.Providers.

Gör det möjligt för användare att logga in med sina befintliga autentiseringsuppgifter:

  • Är praktiskt för användarna.
  • Flyttar många av komplexiteterna i att hantera inloggningsprocessen till en tredje part.

Skapa ett nytt ASP.NET Core-projekt

  • Välj mallen ASP.NET Core Web App. Välj OK.
  • I autentiseringstypens fält väljer du enskilda konton.

Tillämpa migreringar

  • Kör appen och välj länken Registrera.
  • Ange e-post och lösenord för det nya kontot och välj sedan Registrera.
  • Följ anvisningarna för att tillämpa migreringar.

Vidarebefordra begärans information genom 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örlorar man det säkra protokollet (https) resulterar det 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 för hantering av begäran.

Mer information finns i Konfigurera ASP.NET Core att fungera med proxyservrar och lastbalanserare.

Använda SecretManager för att lagra token som tilldelats av inloggningsprovidrar

Leverantörer av sociala inloggningar tilldelar program-ID och programhemlighetstoken under registreringsprocessen. De exakta tokennamnen varierar beroende på provider. Dessa token representerar de autentiseringsuppgifter som appen använder för att komma åt deras API. Token utgör de "användarhemligheter" som kan länkas till din appkonfiguration med hjälp av Secret Manager-. Användarhemligheter är ett säkrare alternativ till att lagra token i en konfigurationsfil, till exempel appsettings.json.

Viktig

Secret Manager är endast i utvecklingssyfte. Du kan lagra och skydda Azure-test- och produktionshemligheter med Azure Key Vault-konfigurationsprovidern.

Följ stegen i Säker lagring av apphemligheter under utveckling i ASP.NET Core ämne för att lagra token som tilldelats av varje inloggningsprovider nedan.

Konfigurera inloggningsprovidrar som krävs av ditt program

Använd följande avsnitt för att konfigurera programmet så att det använder respektive providers:

Flera autentiseringsprovidrar

När appen kräver flera leverantörer kedjar du providertilläggsmetoderna från AddAuthentication:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebApplication16.Data;

var builder = WebApplication.CreateBuilder(args);
var config = builder.Configuration;

var connectionString = config.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options =>
                                 options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddAuthentication()
   .AddGoogle(options =>
   {
       IConfigurationSection googleAuthNSection =
       config.GetSection("Authentication:Google");
       options.ClientId = googleAuthNSection["ClientId"];
       options.ClientSecret = googleAuthNSection["ClientSecret"];
   })
   .AddFacebook(options =>
   {
       IConfigurationSection FBAuthNSection =
       config.GetSection("Authentication:FB");
       options.ClientId = FBAuthNSection["ClientId"];
       options.ClientSecret = FBAuthNSection["ClientSecret"];
   })
   .AddMicrosoftAccount(microsoftOptions =>
   {
       microsoftOptions.ClientId = config["Authentication:Microsoft:ClientId"];
       microsoftOptions.ClientSecret = config["Authentication:Microsoft:ClientSecret"];
   })
   .AddTwitter(twitterOptions =>
   {
       twitterOptions.ConsumerKey = config["Authentication:Twitter:ConsumerAPIKey"];
       twitterOptions.ConsumerSecret = config["Authentication:Twitter:ConsumerSecret"];
       twitterOptions.RetrieveUserDetails = true;
   });

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();
app.MapDefaultControllerRoute();

app.Run();

Alternativt kan du ange lösenord

När du registrerar dig hos en extern inloggningsprovider har du inget lösenord registrerat med appen. Detta gör att du inte kan skapa och komma ihåg ett lösenord för webbplatsen, men det gör dig också beroende av den externa inloggningsprovidern. Om den externa inloggningsprovidern inte är tillgänglig kan du inte logga in på webbplatsen.

Så här skapar du ett lösenord och loggar in med din e-post som du angav under inloggningsprocessen med externa leverantörer:

  • Välj e-postalias-länken Hello <> längst upp till höger för att navigera till Hantera-vyn.

Webbapplikation Hantera vyer

  • Välj Skapa

Ange lösenordssidan

  • Ange ett giltigt lösenord så kan du använda det för att logga in med din e-post.

Ytterligare information