Penyiapan masuk eksternal Twitter dengan ASP.NET Core
Oleh Valeriy Novytskyy dan Rick Anderson
Sampel ini menunjukkan cara memungkinkan pengguna untuk masuk dengan akun Twitter mereka menggunakan contoh proyek ASP.NET Core yang dibuat di halaman sebelumnya.
Catatan
Paket Microsoft.AspNetCore.Authentication.Twitter yang dijelaskan di bawah ini menggunakan API OAuth 1.0 yang disediakan oleh Twitter. Twitter telah menambahkan API OAuth 2.0 dengan serangkaian fungsionalitas yang berbeda. Paket OpenIddict dan AspNet.Security.OAuth.Twitter adalah implementasi komunitas yang menggunakan API OAuth 2.0 baru.
Membuat aplikasi di Twitter
Tambahkan paket NuGet Microsoft.AspNetCore.Authentication.Twitter ke proyek.
Buka Dasbor portal pengembang twitter dan masuk. Jika Anda belum memiliki akun Twitter, gunakan tautan Daftar sekarang untuk membuatnya.
Jika Anda tidak memiliki proyek, buat proyek.
Pilih + Tambahkan aplikasi. Isi Nama aplikasi lalu rekam Kunci API yang dihasilkan, Rahasia Kunci API, dan Token Pembawa. Ini akan diperlukan nanti.
Di halaman Pengaturan Aplikasi, pilih Edit di bagian Pengaturan autentikasi, lalu:
- Aktifkan OAuth berkakala 3
- Meminta alamat email dari pengguna
- Isi bidang yang diperlukan dan pilih Simpan
Catatan
Microsoft.AspNetCore.Identity mengharuskan pengguna untuk memiliki alamat email secara default. Untuk URL Panggilan Balik selama pengembangan, gunakan
https://localhost:{PORT}/signin-twitter
, di mana{PORT}
tempat penampung adalah port aplikasi.Catatan
Segmen
/signin-twitter
URI ditetapkan sebagai panggilan balik default penyedia autentikasi Twitter. Anda dapat mengubah URI panggilan balik default saat mengonfigurasi middleware autentikasi Twitter melalui properti kelas yang TwitterOptions diwariskanRemoteAuthenticationOptions.CallbackPath.
Menyimpan kunci dan rahasia API konsumen Twitter
Simpan pengaturan sensitif seperti kunci API konsumen Twitter dan rahasia dengan Secret Manager. Untuk sampel ini, gunakan langkah-langkah berikut:
Inisialisasi proyek untuk penyimpanan rahasia per instruksi di Aktifkan penyimpanan rahasia.
Simpan pengaturan sensitif di penyimpanan rahasia lokal dengan kunci
Authentication:Twitter:ConsumerKey
rahasia danAuthentication:Twitter:ConsumerSecret
:dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>" dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-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
:
Token ini dapat ditemukan di tab Kunci dan Token Akses setelah membuat aplikasi Twitter baru:
Mengonfigurasi Autentikasi Twitter
Tambahkan layanan Autentikasi ke Startup.ConfigureServices
:
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options =>
options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddAuthentication().AddTwitter(twitterOptions =>
{
twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerAPIKey"];
twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
twitterOptions.RetrieveUserDetails = true;
});
}
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;
services.AddAuthentication().AddTwitter(twitterOptions =>
{
twitterOptions.ConsumerKey = configuration["Authentication:Twitter:ConsumerAPIKey"];
twitterOptions.ConsumerSecret = configuration["Authentication:Twitter:ConsumerSecret"];
});
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.
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 => { ... });
Untuk informasi selengkapnya tentang opsi konfigurasi yang didukung oleh autentikasi Twitter, lihat TwitterOptions referensi API. Ini dapat digunakan untuk meminta informasi yang berbeda tentang pengguna.
Masuk dengan Twitter
Jalankan aplikasi dan pilih Masuk. Opsi untuk masuk dengan Twitter muncul:
Memilih pengalihan Twitter ke Twitter untuk autentikasi:
Setelah memasukkan kredensial Twitter, Anda dialihkan kembali ke situs web tempat Anda dapat mengatur email.
Anda sekarang masuk menggunakan kredensial Twitter Anda:
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
- ASP.NET Core 2.x saja: Jika Identity tidak dikonfigurasi dengan memanggil
services.AddIdentity
,ConfigureServices
mencoba mengautentikasi akan menghasilkan ArgumentException: Opsi 'SignInScheme' harus disediakan. Templat proyek yang digunakan dalam sampel ini memastikan Identity dikonfigurasi. - 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 menunjukkan bagaimana Anda dapat mengautentikasi dengan Twitter. Anda dapat mengikuti pendekatan serupa untuk mengautentikasi dengan penyedia lain yang tercantum di halaman sebelumnya.
Setelah menerbitkan situs web ke aplikasi web Azure, Anda harus mengatur ulang
ConsumerSecret
di portal pengembang Twitter.Atur
Authentication:Twitter:ConsumerKey
pengaturan aplikasi danAuthentication:Twitter:ConsumerSecret
sebagai di portal Azure. Sistem konfigurasi disiapkan untuk membaca kunci dari variabel lingkungan.
ASP.NET Core