Penyiapan login eksternal Akun Microsoft dengan ASP.NET Core

Oleh Valeriy Novytskyy dan Rick Anderson

Sampel ini menunjukkan kepada Anda cara mengaktifkan pengguna untuk masuk dengan akun Microsoft kantor, sekolah, atau pribadi mereka menggunakan proyek ASP.NET Core 6.0 yang dibuat di halaman sebelumnya.

Membuat aplikasi di Portal Pengembang Microsoft

Jika Anda tidak memiliki akun Microsoft, pilih Buat akun. Setelah masuk, Anda dialihkan ke halaman Pendaftaran aplikasi:

  • Pilih Pendaftaran baru
  • Masukkan nama .
  • Pilih opsi untuk Jenis akun yang didukung.
    • Paket ini MicrosoftAccount mendukung Pendaftaran Aplikasi yang dibuat menggunakan opsi "Akun di direktori organisasi apa pun" atau "Akun di direktori organisasi dan akun Microsoft" secara default.
    • Untuk menggunakan opsi lain, atur AuthorizationEndpoint dan anggota yang MicrosoftAccountOptions digunakan untuk menginisialisasi autentikasi Akun Microsoft ke URL yang ditampilkan di halaman Titik Akhir Pendaftaran Aplikasi setelah dibuat (tersedia dengan mengklik Titik Akhir di halaman Gambaran UmumTokenEndpoint).
  • Di bawah URI Pengalihan, masukkan URL pengembangan Anda dengan /signin-microsoft ditambahkan. Contohnya, https://localhost:5001/signin-microsoft. Skema autentikasi Microsoft yang dikonfigurasi nanti dalam sampel ini akan secara otomatis menangani permintaan di /signin-microsoft rute untuk menerapkan alur OAuth.
  • Pilih Daftar

Membuat rahasia klien

  • Di panel kiri, pilih Sertifikat & rahasia.
  • Di bawah Rahasia klien, pilih Rahasia klien baru
    • Tambahkan deskripsi untuk rahasia klien.
    • Pilih tombol Tambahkan.
  • Di bawah Rahasia klien, salin nilai rahasia klien.

Segmen URI /signin-microsoft ditetapkan sebagai panggilan balik default penyedia autentikasi Microsoft. Anda dapat mengubah URI panggilan balik default saat mengonfigurasi middleware autentikasi Microsoft melalui properti kelas yang MicrosoftAccountOptions diwariskanRemoteAuthenticationOptions.CallbackPath.

Menyimpan ID dan rahasia klien Microsoft

Simpan pengaturan sensitif seperti ID Aplikasi Microsoft (klien) yang ditemukan di halaman Gambaran Umum Pendaftaran Aplikasi dan Rahasia Klien yang Anda buat di halaman Sertifikat & rahasia dengan Secret Manager. Untuk sampel ini, gunakan langkah-langkah berikut:

  1. Inisialisasi proyek untuk penyimpanan rahasia per instruksi di Aktifkan penyimpanan rahasia.

  2. Simpan pengaturan sensitif di penyimpanan rahasia lokal dengan kunci Authentication:Microsoft:ClientId rahasia dan Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Pemisah : tidak berfungsi dengan kunci hierarkis variabel lingkungan di semua platform. __, garis bawah ganda:

  • Didukung oleh semua platform. Misalnya, pemisah : tidak didukung oleh Bash, tetapi __ didukung.
  • Secara otomatis diganti dengan :

Mengonfigurasi Autentikasi Akun Microsoft

Tambahkan layanan Autentikasi ke Program:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
    });

Kelebihan AddAuthentication(IServiceCollection, String) beban mengatur DefaultScheme properti. Kelebihan AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) beban memungkinkan konfigurasi opsi autentikasi, yang dapat digunakan untuk menyiapkan skema autentikasi default untuk tujuan yang berbeda. Panggilan berikutnya untuk AddAuthentication mengambil alih properti yang dikonfigurasi AuthenticationOptions sebelumnya.

AuthenticationBuilder metode ekstensi yang mendaftarkan handler autentikasi hanya dapat dipanggil sekali per skema autentikasi. Ada kelebihan beban yang memungkinkan konfigurasi properti skema, nama skema, dan nama tampilan.

Untuk informasi selengkapnya tentang opsi konfigurasi yang didukung oleh autentikasi Akun Microsoft, lihat MicrosoftAccountOptions referensi API. Ini dapat digunakan untuk meminta informasi yang berbeda tentang pengguna.

Masuk dengan Akun Microsoft

  • Jalankan aplikasi dan pilih Masuk. Opsi untuk masuk dengan Microsoft muncul.
  • Pilih untuk masuk dengan Microsoft. Anda diarahkan ke Microsoft untuk autentikasi. Setelah masuk dengan Akun Microsoft, Anda akan diminta untuk mengizinkan aplikasi mengakses info Anda:
  • Pilih Ya. Anda diarahkan kembali ke situs web tempat Anda bisa menyetel email Anda.

Anda sekarang masuk menggunakan kredensial Microsoft Anda.

Beberapa penyedia autentikasi

Saat aplikasi memerlukan beberapa penyedia, rantai metode ekstensi penyedia di belakang AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

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.

Pemecahan Masalah

  • Jika penyedia Akun Microsoft mengalihkan Anda ke halaman kesalahan masuk, perhatikan parameter string kueri judul kesalahan dan deskripsi langsung mengikuti # (hashtag) di Uri.

    Meskipun pesan kesalahan tampaknya menunjukkan masalah dengan autentikasi Microsoft, penyebab paling umum adalah Uri aplikasi Anda tidak cocok dengan URI Pengalihan yang ditentukan untuk platform Web.

  • Jika Identity tidak dikonfigurasi dengan memanggil services.AddIdentity , ConfigureServicesmencoba mengautentikasi akan menghasilkan ArgumentException: Opsi 'SignInScheme' harus disediakan. Templat proyek yang digunakan dalam sampel ini memastikan bahwa ini dilakukan.

  • Jika database situs belum dibuat dengan menerapkan migrasi awal, Anda akan mendapatkan operasi database gagal saat memproses kesalahan permintaan . Ketuk Terapkan Migrasi untuk membuat database dan refresh untuk melanjutkan kesalahan.

Langkah berikutnya

  • Artikel ini memperlihatkan bagaimana Anda dapat mengautentikasi dengan Microsoft. Anda dapat mengikuti pendekatan serupa untuk mengautentikasi dengan penyedia lain yang tercantum di halaman sebelumnya.
  • Setelah Anda menerbitkan situs web Anda ke aplikasi web Azure, buat rahasia klien baru di Portal Pengembang Microsoft.
  • Atur Authentication:Microsoft:ClientId pengaturan aplikasi dan Authentication:Microsoft:ClientSecret sebagai di portal Azure. Sistem konfigurasi disiapkan untuk membaca kunci dari variabel lingkungan.

Sampel ini menunjukkan kepada Anda cara memungkinkan pengguna masuk dengan akun Microsoft kantor, sekolah, atau pribadi mereka menggunakan proyek ASP.NET Core 3.0 yang dibuat di halaman sebelumnya.

Membuat aplikasi di Portal Pengembang Microsoft

Jika Anda tidak memiliki akun Microsoft, pilih Buat akun. Setelah masuk, Anda dialihkan ke halaman Pendaftaran aplikasi:

  • Pilih Pendaftaran baru
  • Masukkan nama .
  • Pilih opsi untuk Jenis akun yang didukung.
    • Paket ini MicrosoftAccount mendukung Pendaftaran Aplikasi yang dibuat menggunakan opsi "Akun di direktori organisasi apa pun" atau "Akun di direktori organisasi dan akun Microsoft" secara default.
    • Untuk menggunakan opsi lain, atur AuthorizationEndpoint dan anggota yang MicrosoftAccountOptions digunakan untuk menginisialisasi autentikasi Akun Microsoft ke URL yang ditampilkan di halaman Titik Akhir Pendaftaran Aplikasi setelah dibuat (tersedia dengan mengklik Titik Akhir di halaman Gambaran UmumTokenEndpoint).
  • Di bawah URI Pengalihan, masukkan URL pengembangan Anda dengan /signin-microsoft ditambahkan. Contohnya, https://localhost:5001/signin-microsoft. Skema autentikasi Microsoft yang dikonfigurasi nanti dalam sampel ini akan secara otomatis menangani permintaan di /signin-microsoft rute untuk menerapkan alur OAuth.
  • Pilih Daftar

Membuat rahasia klien

  • Di panel kiri, pilih Sertifikat & rahasia.
  • Di bawah Rahasia klien, pilih Rahasia klien baru
    • Tambahkan deskripsi untuk rahasia klien.
    • Pilih tombol Tambahkan.
  • Di bawah Rahasia klien, salin nilai rahasia klien.

Segmen URI /signin-microsoft ditetapkan sebagai panggilan balik default penyedia autentikasi Microsoft. Anda dapat mengubah URI panggilan balik default saat mengonfigurasi middleware autentikasi Microsoft melalui properti kelas yang MicrosoftAccountOptions diwariskanRemoteAuthenticationOptions.CallbackPath.

Menyimpan ID dan rahasia klien Microsoft

Simpan pengaturan sensitif seperti ID Aplikasi Microsoft (klien) yang ditemukan di halaman Gambaran Umum Pendaftaran Aplikasi dan Rahasia Klien yang Anda buat di halaman Sertifikat & rahasia dengan Secret Manager. Untuk sampel ini, gunakan langkah-langkah berikut:

  1. Inisialisasi proyek untuk penyimpanan rahasia per instruksi di Aktifkan penyimpanan rahasia.

  2. Simpan pengaturan sensitif di penyimpanan rahasia lokal dengan kunci Authentication:Microsoft:ClientId rahasia dan Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Pemisah : tidak berfungsi dengan kunci hierarkis variabel lingkungan di semua platform. __, garis bawah ganda:

  • Didukung oleh semua platform. Misalnya, pemisah : tidak didukung oleh Bash, tetapi __ didukung.
  • Secara otomatis diganti dengan :

Mengonfigurasi Autentikasi Akun Microsoft

Tambahkan layanan Akun Microsoft ke 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"];
    });
}

Kelebihan AddAuthentication(IServiceCollection, String) beban mengatur DefaultScheme properti. Kelebihan AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) beban memungkinkan konfigurasi opsi autentikasi, yang dapat digunakan untuk menyiapkan skema autentikasi default untuk tujuan yang berbeda. Panggilan berikutnya untuk AddAuthentication mengambil alih properti yang dikonfigurasi AuthenticationOptions sebelumnya.

AuthenticationBuilder metode ekstensi yang mendaftarkan handler autentikasi hanya dapat dipanggil sekali per skema autentikasi. Ada kelebihan beban yang memungkinkan konfigurasi properti skema, nama skema, dan nama tampilan.

Untuk informasi selengkapnya tentang opsi konfigurasi yang didukung oleh autentikasi Akun Microsoft, lihat MicrosoftAccountOptions referensi API. Ini dapat digunakan untuk meminta informasi yang berbeda tentang pengguna.

Masuk dengan Akun Microsoft

Jalankan aplikasi dan pilih Masuk. Opsi untuk masuk dengan Microsoft muncul. Saat Anda memilih Microsoft, Anda diarahkan ke Microsoft untuk autentikasi. Setelah masuk dengan Akun Microsoft, Anda akan diminta untuk mengizinkan aplikasi mengakses info Anda:

Ketuk Ya dan Anda akan diarahkan kembali ke situs web tempat Anda dapat mengatur email.

Anda sekarang masuk menggunakan kredensial Microsoft Anda.

Beberapa penyedia autentikasi

Saat aplikasi memerlukan beberapa penyedia, rantai metode ekstensi penyedia di belakang AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

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.

Pemecahan Masalah

  • Jika penyedia Akun Microsoft mengalihkan Anda ke halaman kesalahan masuk, perhatikan parameter string kueri judul kesalahan dan deskripsi langsung mengikuti # (hashtag) di Uri.

    Meskipun pesan kesalahan tampaknya menunjukkan masalah dengan autentikasi Microsoft, penyebab paling umum adalah Uri aplikasi Anda tidak cocok dengan URI Pengalihan yang ditentukan untuk platform Web.

  • Jika Identity tidak dikonfigurasi dengan memanggil services.AddIdentity , ConfigureServicesmencoba mengautentikasi akan menghasilkan ArgumentException: Opsi 'SignInScheme' harus disediakan. Templat proyek yang digunakan dalam sampel ini memastikan bahwa ini dilakukan.

  • Jika database situs belum dibuat dengan menerapkan migrasi awal, Anda akan mendapatkan operasi database gagal saat memproses kesalahan permintaan . Ketuk Terapkan Migrasi untuk membuat database dan refresh untuk melanjutkan kesalahan.

Langkah berikutnya

  • Artikel ini memperlihatkan bagaimana Anda dapat mengautentikasi dengan Microsoft. Anda dapat mengikuti pendekatan serupa untuk mengautentikasi dengan penyedia lain yang tercantum di halaman sebelumnya.
  • Setelah Anda menerbitkan situs web Anda ke aplikasi web Azure, buat rahasia klien baru di Portal Pengembang Microsoft.
  • Atur Authentication:Microsoft:ClientId pengaturan aplikasi dan Authentication:Microsoft:ClientSecret sebagai di portal Azure. Sistem konfigurasi disiapkan untuk membaca kunci dari variabel lingkungan.