Bagikan melalui


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:

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

  2. Simpan pengaturan sensitif di penyimpanan rahasia lokal dengan kunci Authentication:Twitter:ConsumerKey rahasia dan Authentication: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 , ConfigureServicesmencoba 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 dan Authentication:Twitter:ConsumerSecret sebagai di portal Azure. Sistem konfigurasi disiapkan untuk membaca kunci dari variabel lingkungan.