Daftarkan skema otentikasi berdasarkan penyewa di asp.net core 3.1

12

Saat ini, saya telah membuat aplikasi web server Identity 4 dengan penyedia login eksternal dengan id dan rahasia klien default. Tetapi tujuan saya adalah mendaftarkan penyedia otentikasi seperti Azure, Google, Facebook berdasarkan penyewa.

Saya telah menggunakan perakitan multi-tenancy SaasKit , di sini saya telah mencoba app.usepertenant () middleware. Tetapi metode UseGoogleAuthentication () sudah usang, jadi saya tidak bisa mencapai otentikasi multi-penyewa menggunakan middleware usepertenant ini.

Kode saat ini,

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

Kode yang diharapkan seperti di bawah ini,

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });

Madhan kumar D
sumber
Mungkin Anda dapat menemukan jawaban atau solusi di utas ini .
Ruard van Elburg
@RuardvanElburg terima kasih atas balasan Anda, dari utas yang disarankan, kami dapat memperbarui opsi skema yang sudah terdaftar berdasarkan penyewa saat aplikasi dimulai. Setelah kami tidak dapat memperbaruinya.
Madhan kumar D
Apakah Anda ingin memiliki pengaturan ClientId / ClientSecret yang berbeda per penyewa? Atau apakah Anda hanya ingin menambahkan skema yang berbeda berdasarkan penyewa?
Kirk Larkin
@KirkLarkin skema berbeda dengan clientId / rahasia masing-masing penyewa. Seperti di bawah ini, if (tenant.hasMicrosoft) {otentikasi.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D
Adakah pembaruan tentang ini?
Madhan kumar D

Jawaban:

3

Lihat dokumen MS resmi, penyedia otentikasi per penyewa

ASP.NET Core framework tidak memiliki solusi bawaan untuk otentikasi multi-tenant. Meskipun tentu saja memungkinkan bagi pelanggan untuk menulis satu, menggunakan fitur bawaan, kami menyarankan pelanggan untuk melihat ke Orchard Core untuk tujuan ini.

RickAndMSFT
sumber
0

Karena otentikasi perlu dikonfigurasi selama pendaftaran DI, Anda harus mengatur semua penyedia login eksternal secara umum selama pendaftaran otentikasi.

Selama langkah itu, Anda perlu menambahkan semua skema. Skema memiliki id / rahasia klien tetap, jadi Anda harus mem-bootstrap IdentityServer Anda dengan semua kredensial penyedia login eksternal, yang Anda dukung untuk semua klien Anda. Nama skema harus unik.

Sebagai contoh, penyewa A mungkin memiliki skema "A_microsoft", penyewa B mungkin memiliki skema "B_microsoft", dll.

Anda kemudian dapat merujuk ke skema otentikasi tersebut, saat memanggil metode di IdentityServer. Masuk, Tantangan, Masuk, dll.

Perlu diketahui, bahwa ini akan membutuhkan bootstrap IdentityServer set lengkap penyewa. Bergantung pada skenario Anda, jika penyewa diperbarui secara teratur, penyewa IdentityServer juga akan membutuhkan restart secara berkala untuk mengetahui skema otentikasi baru.


Jika itu adalah masalah, Anda mungkin bisa menambah skema otentikasi terdaftar selama runtime dari IdentityServer, tetapi itu tidak akan mudah. Mungkin memerlukan implementasi kustom yang lebih besar dari middleware otentikasi yang datang dengan AspNetCore.

InDieTasten
sumber
0

Apakah Anda bermaksud menambahkan dukungan untuk beberapa penyedia otentikasi? Dokumen ini sudah menentukan cara menambahkan beberapa penyedia auth dalam layanan konfigurasi. Tidak perlu menggunakan app.UseXXXlagi untuk mengkonfigurasi pipa sendiri

Elendil Zheng-MSFT
sumber