Bagikan melalui


Facebook, Google, dan autentikasi penyedia eksternal di ASP.NET Core

Oleh Valeriy Novytskyy dan Rick Anderson

Tutorial ini menunjukkan cara membangun aplikasi ASP.NET Core yang memungkinkan pengguna masuk menggunakan OAuth 2.0 dengan mandat dari penyedia autentikasi eksternal.

Penyedia Facebook, Twitter, Google, dan Microsoft tercakup dalam bagian berikut dan menggunakan proyek starter yang dibuat dalam artikel ini. Penyedia lain tersedia dalam paket pihak ketiga seperti OpenIddict, AspNet.Security.OAuth.Providers dan AspNet.Security.OpenId.Providers.

Memungkinkan pengguna untuk masuk dengan mandat yang sudah ada:

  • Memudahkan pengguna.
  • Menghilangkan berbagai kompleksitas dalam mengelola proses masuk ke pihak ketiga.

Membuat Proyek ASP.NET Core Baru

  • Pilih template Aplikasi Web ASP.NET Core. Pilih OK.
  • Pada input Jenis autentikasi, pilih Akun Individual.

Menerapkan migrasi

  • Jalankan aplikasi dan pilih tautan Daftar.
  • Masukkan email dan kata sandi untuk akun baru, lalu pilih Daftar.
  • Ikuti petunjuk untuk menerapkan migrasi.

Meneruskan informasi permintaan dengan proksi atau penyeimbang beban

Jika aplikasi disebarkan di belakang server proksi atau penyeimbang beban, beberapa informasi permintaan asli mungkin diteruskan ke aplikasi di header permintaan. Informasi ini biasanya mencakup skema permintaan aman (https), host, dan alamat IP klien. Aplikasi tidak secara otomatis membaca header permintaan ini untuk menemukan dan menggunakan informasi permintaan asli.

Skema ini digunakan dalam pembuatan tautan yang memengaruhi alur autentikasi dengan penyedia eksternal. Kehilangan skema aman (https) akan menyebabkan aplikasi menghasilkan URL pengalihan tidak aman yang salah.

Pakai Forwarded Headers Middleware guna menyediakan informasi permintaan asli untuk aplikasi untuk pemrosesan permintaan.

Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proxy dan memuat penyeimbang.

Menggunakan SecretManager untuk menyimpan token yang diberikan oleh penyedia proses masuk

Penyedia proses masuk sosial menetapkan token Id Aplikasi dan Rahasia Aplikasi selama proses pendaftaran. Nama token yang tepat bervariasi berdasarkan penyedia. Token ini mewakili mandat yang digunakan aplikasi Anda untuk mengakses API mereka. Token merupakan "rahasia pengguna" yang dapat ditautkan ke konfigurasi aplikasi Anda dengan bantuan Pengelola Rahasia. Rahasia pengguna adalah alternatif yang lebih aman dari penyimpanan token dalam file konfigurasi, seperti appsettings.json.

Penting

Manajer Rahasia hanya untuk tujuan pengembangan. Anda dapat menyimpan dan melindungi rahasia pengujian dan produksi Azure dengan penyedia konfigurasi Azure Key Vault.

Ikuti langkah-langkah dalam topik Penyimpanan rahasia aplikasi yang aman dalam pengembangan di ASP.NET Core untuk menyimpan token yang ditetapkan oleh setiap penyedia proses masuk di bawah ini.

Menyiapkan penyedia proses masuk yang diperlukan oleh aplikasi Anda

Gunakan topik berikut untuk mengonfigurasi aplikasi Anda agar menggunakan masing-masing penyedia:

Beberapa penyedia autentikasi

Saat aplikasi memerlukan beberapa penyedia, hubungkan metode ekstensi penyedia dari 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();

Mengatur kata sandi secara opsional

Saat Anda mendaftar dengan penyedia proses masuk eksternal, Anda tidak memiliki kata sandi yang terdaftar di aplikasi. Ini menjadikan Anda tidak perlu membuat dan mengingat kata sandi untuk situs, tetapi juga membuat Anda bergantung pada penyedia proses masuk eksternal. Jika penyedia proses masuk eksternal tidak tersedia, Anda tidak akan dapat masuk ke situs web.

Untuk membuat kata sandi dan masuk menggunakan email yang Anda tetapkan selama proses masuk dengan penyedia eksternal:

  • Pilih tautan Halo <email alias> di sudut kanan atas untuk menavigasi ke tampilan Kelola.

Tampilan Kelola aplikasi web

  • Pilih Buat

Halaman Atur kata sandi

  • Tetapkan kata sandi yang valid dan Anda dapat menggunakan ini untuk masuk dengan email.

Informasi Tambahan