ASP.NET Core'da Facebook, Google ve dış sağlayıcı kimlik doğrulaması

Yayınlayanlar Valeriy Novytskyy ve Rick Anderson

Bu öğreticide, kullanıcıların dış kimlik doğrulaması sağlayıcılarının kimlik bilgileriyle OAuth 2.0 kullanarak oturum açmasına olanak tanıyan bir ASP.NET Core uygulaması oluşturma gösterilmektedir.

Facebook, Twitter, Google ve Microsoft sağlayıcıları aşağıdaki bölümlerde ele alınmıştır ve bu makalede oluşturulan başlangıç projesini kullanır. Diğer sağlayıcılar OpenIddict, AspNet.Security.OAuth.Providers ve AspNet.Security.OpenId.Providers gibi üçüncü taraf paketlerde kullanılabilir.

Kullanıcıların mevcut kimlik bilgileriyle oturum açmasını sağlama:

  • Kullanıcılar için kullanışlıdır.
  • Oturum açma işlemini yönetmenin karmaşıklıklarının çoğunu bir üçüncü tarafa kaydırır.

Yeni bir ASP.NET Core projesi oluşturma

  • ASP.NET Core Web Uygulaması şablonunu seçin. Tamam'ı seçin.
  • Kimlik doğrulama türü girişinde Bireysel Hesaplar'ı seçin.

Geçişleri uygulama

  • Uygulamayı çalıştırın ve Kaydet bağlantısını seçin.
  • Yeni hesap için e-posta ile parolayı girin ve Kaydet’i seçin.
  • Geçişleri uygulamak için yönergeleri izleyin.

İstek bilgilerini ara sunucu veya yük dengeleyici ile iletme

Uygulama bir ara sunucunun veya yük dengeleyicinin arkasına dağıtılırsa, özgün istek bilgilerinden bazıları istek üst bilgilerinde uygulamaya iletilebilir. Bu bilgiler genellikle güvenli istek düzenini (https), ana bilgisayarı ve istemci IP adresini içerir. Uygulamalar, özgün istek bilgilerini bulmak ve kullanmak için bu istek üst bilgilerini otomatik olarak okumaz.

Düzen, dış sağlayıcılarla kimlik doğrulaması akışını etkileyen bağlantı oluşturmada kullanılır. Güvenli düzenin (https) kaybedilmesi, uygulamanın yanlış güvenli olmayan yeniden yönlendirme URL'leri oluşturmasını sağlar.

Özgün istek bilgilerini uygulamaya, istek işleme için kullanılabilir hale getirmek için İletilen Üstbilgiler Ara Yazılımını kullanın.

Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

Oturum açma sağlayıcıları tarafından atanan belirteçleri depolamak için SecretManager kullanma

Sosyal oturum açma sağlayıcıları kayıt işlemi sırasında Uygulama Kimliği ve Uygulama Gizli Anahtarı belirteçleri atar. Tam belirteç adları sağlayıcıya göre değişir. Bu belirteçler, uygulamanızın API'lerine erişmek için kullandığı kimlik bilgilerini temsil eder. Belirteçler, Gizli Dizi Yöneticisi’nin yardımıyla uygulama yapılandırmanıza bağlanabilen "kullanıcı gizli dizilerini" oluşturur. Kullanıcı gizli dizileri, belirteçleri appsettings.json gibi bir yapılandırma dosyasında depolamaya daha güvenli bir alternatiftir.

Önemli

Gizli Dizi Yöneticisi yalnızca geliştirme amaçlıdır. Azure test ve üretim gizli dizilerini Azure Key Vault yapılandırma sağlayıcısıyla depolayabilir ve koruyabilirsiniz.

Aşağıdaki her oturum açma sağlayıcısı tarafından atanan belirteçleri depolamak için ASP.NET Core geliştirme aşamasında uygulama gizli dizilerinin güvenli depolanması konusundaki adımları izleyin.

Uygulamanızın gerektirdiği oturum açma sağlayıcılarını ayarlama

Uygulamanızı ilgili sağlayıcıları kullanacak şekilde yapılandırmak için aşağıdaki konuları kullanın:

Çoklu kimlik doğrulaması sağlayıcıları

Uygulama birden çok sağlayıcı gerektirdiğinde, sağlayıcı uzantısı yöntemlerini AddAuthentication içinden zincire ekleyin:

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();

İsteğe bağlı olarak parola ayarlama

Bir dış oturum açma sağlayıcısına kaydolduğunuzda, uygulamaya kayıtlı bir parolanız olmaz. Bu, site için parola oluşturmanızı ve anımsamanızı kolaylaştırır, ancak aynı zamanda dış oturum açma sağlayıcısına bağımlı olmanıza sebep olur. Dış oturum açma sağlayıcısı kullanılamıyorsa web sitesinde oturum açamazsınız.

Parola oluşturmak ve dış sağlayıcılarla oturum açma işlemi sırasında ayarladığınız e-postanızı kullanarak oturum açmak için:

  • Sağ üst köşedeki Merhaba ve e-posta diğer adı> bağlantısını seçerek Yönet görünümüne gidin.

Web uygulaması Görünümü yönetme

  • Oluştur'u seçin

Parolanızı ayarlama sayfası

  • Geçerli bir parola ayarladığınızda, bunu kullanarak e-postanızla oturum açabilirsiniz.

Ek bilgi