Ringkasan autentikasi ASP.NET Core
Oleh Mike Rousos
Autentikasi adalah proses penentuan identitypengguna. Otorisasi adalah proses untuk menentukan apakah pengguna memiliki akses ke sumber daya. Di ASP.NET Core, autentikasi ditangani oleh layanan autentikasi, IAuthenticationService, yang digunakan oleh middleware autentikasi. Layanan autentikasi menggunakan penangan autentikasi terdaftar untuk menyelesaikan tindakan terkait autentikasi. Contoh tindakan terkait autentikasi meliputi:
- Mengautentikasi pengguna.
- Merespons saat pengguna yang tidak diautentikasi mencoba mengakses sumber daya yang dibatasi.
Penangan autentikasi terdaftar dan opsi konfigurasinya disebut "skema".
Skema autentikasi ditentukan dengan mendaftarkan layanan autentikasi di Program.cs
:
- Dengan memanggil metode ekstensi khusus skema setelah panggilan ke AddAuthentication, seperti AddJwtBearer atau AddCookie. Metode ekstensi ini menggunakan AuthenticationBuilder.AddScheme untuk mendaftarkan skema dengan pengaturan yang sesuai.
- Dan terkadang, dengan menelepon
AuthenticationBuilder.AddScheme
secara langsung.
Misalnya, kode berikut mendaftarkan layanan dan penangan autentikasi untuk cookie dan skema autentikasi token pembawa JWT:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("JwtSettings", options))
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("CookieSettings", options));
Parameter AddAuthentication
JwtBearerDefaults.AuthenticationScheme adalah nama skema yang akan digunakan secara default saat skema tertentu tidak diminta.
Jika beberapa skema digunakan, kebijakan otorisasi (atau atribut otorisasi) dapat menentukan skema autentikasi (atau skema) yang mereka andalkan untuk mengautentikasi pengguna. Dalam contoh di atas, skema autentikasi cookie dapat digunakan dengan menetapkan namanya (CookieAuthenticationDefaults.AuthenticationScheme secara default, meskipun nama yang berbeda dapat diberikan saat memanggil AddCookie
).
Dalam beberapa kasus, panggilan ke AddAuthentication
secara otomatis dilakukan dengan metode ekstensi lainnya. Misalnya, saat menggunakan ASP.NET Core Identity, AddAuthentication
dipanggil secara internal.
Middleware Autentikasi ditambahkan di Program.cs
dengan memanggil UseAuthentication. Memanggil UseAuthentication
akan mendaftarkan middleware yang menggunakan skema autentikasi yang terdaftar sebelumnya. Panggil UseAuthentication
sebelum middleware apa pun yang bergantung pada pengguna yang diautentikasi.
Konsep autentikasi
Autentikasi bertanggung jawab untuk menyediakan ClaimsPrincipal otorisasi untuk membuat keputusan izin. Ada beberapa pendekatan skema autentikasi untuk memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar:
- Skema autentikasi
- Skema autentikasi default, dibahas di dua bagian berikutnya.
- Atur langsung HttpContext.User.
Ketika hanya ada satu skema autentikasi yang terdaftar, itu menjadi skema default. Jika beberapa skema terdaftar dan skema default tidak ditentukan, skema harus ditentukan dalam atribut otorisasi, jika tidak, kesalahan berikut dilemparkan:
InvalidOperationException: Tidak ada autentikasiScheme yang ditentukan, dan tidak ada DefaultAuthenticateScheme yang ditemukan. Skema default dapat diatur menggunakan AddAuthentication(string defaultScheme) atau AddAuthentication(Action<AuthenticationOptions> configureOptions).
DefaultScheme
Ketika hanya ada satu skema autentikasi yang terdaftar, skema autentikasi tunggal:
- Secara otomatis digunakan sebagai DefaultScheme.
- Menghilangkan kebutuhan untuk menentukan
DefaultScheme
dalam AddAuthentication(IServiceCollection) atau AddAuthenticationCore(IServiceCollection).
Untuk menonaktifkan secara otomatis menggunakan skema autentikasi tunggal sebagai DefaultScheme
, panggil AppContext.SetSwitch("Microsoft.AspNetCore.Authentication.SuppressAutoDefaultScheme")
.
Skema autentikasi
Skema autentikasi dapat memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar. Untuk informasi lebih lanjut, lihat Otorisasi dengan skema tertentu.
Skema autentikasi adalah nama yang sesuai dengan:
- Penangan autentikasi.
- Opsi untuk mengonfigurasi instans khusus dari penangan.
Skema berguna sebagai mekanisme untuk merujuk pada perilaku autentikasi, permintaan, dan larangan dari penangan terkait. Misalnya, kebijakan otorisasi dapat menggunakan nama skema untuk menentukan skema autentikasi (atau skema) mana yang harus digunakan untuk mengautentikasi pengguna. Saat mengonfigurasi autentikasi, menentukan skema autentikasi default adalah hal yang umum. Skema default digunakan kecuali jika sumber daya meminta skema tertentu. Anda juga dapat:
- Menentukan skema default yang berbeda untuk mengautentikasi, meminta, dan melarang tindakan.
- Gabungkan beberapa skema menjadi satu menggunakan skema kebijakan.
Penangan autentikasi
Penangan autentikasi:
- Adalah jenis yang menerapkan perilaku skema.
- Berasal dari IAuthenticationHandler atau AuthenticationHandler<TOptions>.
- Memiliki tanggung jawab utama untuk mengautentikasi pengguna.
Berdasarkan konfigurasi skema autentikasi dan konteks permintaan yang masuk, penangan autentikasi:
- AuthenticationTicket Buat objek yang mewakili pengguna identity jika autentikasi berhasil.
- Mengembalikan 'tidak ada hasil' atau 'gagal' jika autentikasi tidak berhasil.
- Memiliki metode untuk tantangan dan tindakan terlarang ketika pengguna mencoba mengakses sumber daya:
- Pengguna tidak berhak untuk mengakses (melarang).
- Ketika pengguna tidak diautentikasi (diminta).
RemoteAuthenticationHandler<TOptions>
vs AuthenticationHandler<TOptions>
RemoteAuthenticationHandler<TOptions> adalah kelas untuk autentikasi yang memerlukan langkah autentikasi jarak jauh. Saat langkah autentikasi jarak jauh selesai, penangan memanggil kembali ke CallbackPath
yang diatur oleh penangan. Penangan menyelesaikan langkah autentikasi menggunakan informasi yang diteruskan ke jalur panggilan balik HandleRemoteAuthenticateAsync. OAuth 2.0 dan OIDC keduanya menggunakan pola ini. JWT dan cookie tidak karena mereka dapat langsung menggunakan header pembawa dan cookie untuk mengautentikasi. Penyedia yang dihosting dari jarak jauh dalam hal ini:
- Merupakan penyedia autentikasi.
- Contohnya termasuk Facebook, Twitter, Google, Microsoft, dan penyedia OIDC lainnya yang menangani autentikasi pengguna menggunakan mekanisme penangan.
Autentikasi
Tindakan autentikasi skema autentikasi bertanggung jawab untuk membangun pengguna identity berdasarkan konteks permintaan. Ini mengembalikan yang AuthenticateResult menunjukkan apakah autentikasi berhasil dan, jika demikian, pengguna berada identity dalam tiket autentikasi. Lihat AuthenticateAsync. Contoh autentikasi meliputi:
- cookie Skema autentikasi yang membangun pengguna identity dari cookie.
- Skema pembawa JWT mendeserialisasi dan memvalidasi token pembawa JWT untuk membangun pengguna identity.
Latihan
Permintaan autentikasi dipanggil oleh Otorisasi ketika pengguna yang tidak diautentikasi meminta titik akhir yang memerlukan autentikasi. Permintaan autentikasi diterbitkan, misalnya, ketika pengguna anonim meminta sumber daya terbatas atau mengikuti tautan masuk. Otorisasi memanggil permintaan menggunakan skema autentikasi yang ditentukan, atau default jika tidak ada yang ditentukan. Lihat ChallengeAsync. Contoh permintaan autentikasi meliputi:
- Skema autentikasi cookie mengalihkan pengguna ke halaman masuk.
- Skema token pembawa JWT mengembalikan hasil 401 dengan header
www-authenticate: bearer
.
Tindakan permintaan harus memberi tahu pengguna mekanisme autentikasi apa yang digunakan untuk mengakses sumber daya yang diminta.
Larangan
Tindakan melarang skema autentikasi dipanggil oleh Otorisasi ketika pengguna yang diautentikasi mencoba mengakses sumber daya yang tidak diizinkan untuk mereka akses. Lihat ForbidAsync. Contoh larangan autentikasi meliputi:
- Skema autentikasi cookie yang mengalihkan pengguna ke halaman yang menunjukkan bahwa akses dilarang.
- Skema token pembawa JWT mengembalikan hasil 403.
- Skema autentikasi khusus yang mengalihkan ke halaman tempat pengguna dapat meminta akses ke sumber daya.
Tindakan larangan dapat memberi tahu pengguna:
- Mereka diautentikasi.
- Mereka tidak diizinkan untuk mengakses sumber daya yang diminta.
Lihat tautan berikut untuk mengetahui perbedaan antara permintaan dan larangan:
Penyedia autentikasi per penyewa
ASP.NET Core tidak memiliki solusi bawaan untuk autentikasi multi-penyewa. Meskipun pelanggan dapat menulisnya menggunakan fitur bawaan, sebaiknya pelanggan mempertimbangkan Orchard Core, ABP Framework, atau Finbuckle.MultiTenant untuk autentikasi multi-penyewa.
Orchard Core adalah:
- Kerangka kerja aplikasi sumber terbuka, modular, dan multi-penyewa yang dibangun dengan ASP.NET Core.
- Sistem manajemen konten (CMS) yang dibangun di atas kerangka kerja aplikasi tersebut.
Lihat sumber Orchard Core untuk contoh penyedia autentikasi per penyewa.
Kerangka Kerja ABP mendukung berbagai pola arsitektur termasuk modularitas, layanan mikro, desain berbasis domain, dan multi-penyewa. Lihat sumber Kerangka Kerja ABP di GitHub.
Finbuckle.MultiTenant:
- Sumber terbuka
- Menyediakan resolusi penyewa
- Ringan
- Menyediakan isolasi data
- Mengonfigurasi perilaku aplikasi secara unik untuk setiap penyewa
Sumber Daya Tambahan:
Oleh Mike Rousos
Autentikasi adalah proses penentuan identitypengguna. Otorisasi adalah proses untuk menentukan apakah pengguna memiliki akses ke sumber daya. Di ASP.NET Core, autentikasi ditangani oleh layanan autentikasi, IAuthenticationService, yang digunakan oleh middleware autentikasi. Layanan autentikasi menggunakan penangan autentikasi terdaftar untuk menyelesaikan tindakan terkait autentikasi. Contoh tindakan terkait autentikasi meliputi:
- Mengautentikasi pengguna.
- Merespons saat pengguna yang tidak diautentikasi mencoba mengakses sumber daya yang dibatasi.
Penangan autentikasi terdaftar dan opsi konfigurasinya disebut "skema".
Skema autentikasi ditentukan dengan mendaftarkan layanan autentikasi di Program.cs
:
- Dengan memanggil metode ekstensi khusus skema setelah panggilan ke AddAuthentication, seperti AddJwtBearer atau AddCookie. Metode ekstensi ini menggunakan AuthenticationBuilder.AddScheme untuk mendaftarkan skema dengan pengaturan yang sesuai.
- Dan terkadang, dengan menelepon
AuthenticationBuilder.AddScheme
secara langsung.
Misalnya, kode berikut mendaftarkan layanan dan penangan autentikasi untuk cookie dan skema autentikasi token pembawa JWT:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("JwtSettings", options))
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("CookieSettings", options));
Parameter AddAuthentication
JwtBearerDefaults.AuthenticationScheme adalah nama skema yang akan digunakan secara default saat skema tertentu tidak diminta.
Jika beberapa skema digunakan, kebijakan otorisasi (atau atribut otorisasi) dapat menentukan skema autentikasi (atau skema) yang mereka andalkan untuk mengautentikasi pengguna. Dalam contoh di atas, skema autentikasi cookie dapat digunakan dengan menetapkan namanya (CookieAuthenticationDefaults.AuthenticationScheme secara default, meskipun nama yang berbeda dapat diberikan saat memanggil AddCookie
).
Dalam beberapa kasus, panggilan ke AddAuthentication
secara otomatis dilakukan dengan metode ekstensi lainnya. Misalnya, saat menggunakan ASP.NET Core Identity, AddAuthentication
dipanggil secara internal.
Middleware Autentikasi ditambahkan di Program.cs
dengan memanggil UseAuthentication. Memanggil UseAuthentication
akan mendaftarkan middleware yang menggunakan skema autentikasi yang terdaftar sebelumnya. Panggil UseAuthentication
sebelum middleware apa pun yang bergantung pada pengguna yang diautentikasi.
Konsep autentikasi
Autentikasi bertanggung jawab untuk menyediakan ClaimsPrincipal otorisasi untuk membuat keputusan izin. Ada beberapa pendekatan skema autentikasi untuk memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar:
- Skema autentikasi
- Skema autentikasi default, dibahas di bagian selanjutnya.
- Atur langsung HttpContext.User.
Tidak ada pemeriksaan skema secara otomatis. Jika skema default tidak ditentukan, skema harus ditentukan dalam atribut otorisasi, jika tidak, kesalahan berikut akan muncul:
InvalidOperationException: Tidak ada autentikasiScheme yang ditentukan, dan tidak ada DefaultAuthenticateScheme yang ditemukan. Skema default dapat diatur menggunakan AddAuthentication(string defaultScheme) atau AddAuthentication(Action<AuthenticationOptions> configureOptions).
Skema autentikasi
Skema autentikasi dapat memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar. Untuk informasi lebih lanjut, lihat Otorisasi dengan skema tertentu.
Skema autentikasi adalah nama yang sesuai dengan:
- Penangan autentikasi.
- Opsi untuk mengonfigurasi instans khusus dari penangan.
Skema berguna sebagai mekanisme untuk merujuk pada perilaku autentikasi, permintaan, dan larangan dari penangan terkait. Misalnya, kebijakan otorisasi dapat menggunakan nama skema untuk menentukan skema autentikasi (atau skema) mana yang harus digunakan untuk mengautentikasi pengguna. Saat mengonfigurasi autentikasi, menentukan skema autentikasi default adalah hal yang umum. Skema default digunakan kecuali jika sumber daya meminta skema tertentu. Anda juga dapat:
- Menentukan skema default yang berbeda untuk mengautentikasi, meminta, dan melarang tindakan.
- Gabungkan beberapa skema menjadi satu menggunakan skema kebijakan.
Penangan autentikasi
Penangan autentikasi:
- Adalah jenis yang menerapkan perilaku skema.
- Berasal dari IAuthenticationHandler atau AuthenticationHandler<TOptions>.
- Memiliki tanggung jawab utama untuk mengautentikasi pengguna.
Berdasarkan konfigurasi skema autentikasi dan konteks permintaan yang masuk, penangan autentikasi:
- AuthenticationTicket Buat objek yang mewakili pengguna identity jika autentikasi berhasil.
- Mengembalikan 'tidak ada hasil' atau 'gagal' jika autentikasi tidak berhasil.
- Memiliki metode untuk tantangan dan tindakan terlarang ketika pengguna mencoba mengakses sumber daya:
- Pengguna tidak berhak untuk mengakses (melarang).
- Ketika pengguna tidak diautentikasi (diminta).
RemoteAuthenticationHandler<TOptions>
vs AuthenticationHandler<TOptions>
RemoteAuthenticationHandler<TOptions> adalah kelas untuk autentikasi yang memerlukan langkah autentikasi jarak jauh. Saat langkah autentikasi jarak jauh selesai, penangan memanggil kembali ke CallbackPath
yang diatur oleh penangan. Penangan menyelesaikan langkah autentikasi menggunakan informasi yang diteruskan ke jalur panggilan balik HandleRemoteAuthenticateAsync. OAuth 2.0 dan OIDC keduanya menggunakan pola ini. JWT dan cookie tidak karena mereka dapat langsung menggunakan header pembawa dan cookie untuk mengautentikasi. Penyedia yang dihosting dari jarak jauh dalam hal ini:
- Merupakan penyedia autentikasi.
- Contohnya termasuk Facebook, Twitter, Google, Microsoft, dan penyedia OIDC lainnya yang menangani autentikasi pengguna menggunakan mekanisme penangan.
Autentikasi
Tindakan autentikasi skema autentikasi bertanggung jawab untuk membangun pengguna identity berdasarkan konteks permintaan. Ini mengembalikan yang AuthenticateResult menunjukkan apakah autentikasi berhasil dan, jika demikian, pengguna berada identity dalam tiket autentikasi. Lihat AuthenticateAsync. Contoh autentikasi meliputi:
- cookie Skema autentikasi yang membangun pengguna identity dari cookie.
- Skema pembawa JWT mendeserialisasi dan memvalidasi token pembawa JWT untuk membangun pengguna identity.
Latihan
Permintaan autentikasi dipanggil oleh Otorisasi ketika pengguna yang tidak diautentikasi meminta titik akhir yang memerlukan autentikasi. Permintaan autentikasi diterbitkan, misalnya, ketika pengguna anonim meminta sumber daya terbatas atau mengikuti tautan masuk. Otorisasi memanggil permintaan menggunakan skema autentikasi yang ditentukan, atau default jika tidak ada yang ditentukan. Lihat ChallengeAsync. Contoh permintaan autentikasi meliputi:
- Skema autentikasi cookie mengalihkan pengguna ke halaman masuk.
- Skema token pembawa JWT mengembalikan hasil 401 dengan header
www-authenticate: bearer
.
Tindakan permintaan harus memberi tahu pengguna mekanisme autentikasi apa yang digunakan untuk mengakses sumber daya yang diminta.
Larangan
Tindakan melarang skema autentikasi dipanggil oleh Otorisasi ketika pengguna yang diautentikasi mencoba mengakses sumber daya yang tidak diizinkan untuk mereka akses. Lihat ForbidAsync. Contoh larangan autentikasi meliputi:
- Skema autentikasi cookie yang mengalihkan pengguna ke halaman yang menunjukkan bahwa akses dilarang.
- Skema token pembawa JWT mengembalikan hasil 403.
- Skema autentikasi khusus yang mengalihkan ke halaman tempat pengguna dapat meminta akses ke sumber daya.
Tindakan larangan dapat memberi tahu pengguna:
- Mereka diautentikasi.
- Mereka tidak diizinkan untuk mengakses sumber daya yang diminta.
Lihat tautan berikut untuk mengetahui perbedaan antara permintaan dan larangan:
Penyedia autentikasi per penyewa
ASP.NET Core tidak memiliki solusi bawaan untuk autentikasi multi-penyewa. Meskipun pelanggan dapat menulisnya menggunakan fitur bawaan, sebaiknya pelanggan mempertimbangkan Orchard Core atau ABP Framework untuk autentikasi multi-penyewa.
Orchard Core adalah:
- Kerangka kerja aplikasi sumber terbuka, modular, dan multi-penyewa yang dibangun dengan ASP.NET Core.
- Sistem manajemen konten (CMS) yang dibangun di atas kerangka kerja aplikasi tersebut.
Lihat sumber Orchard Core untuk contoh penyedia autentikasi per penyewa.
Kerangka Kerja ABP mendukung berbagai pola arsitektur termasuk modularitas, layanan mikro, desain berbasis domain, dan multi-penyewa. Lihat sumber Kerangka Kerja ABP di GitHub.
Sumber Daya Tambahan:
Oleh Mike Rousos
Autentikasi adalah proses penentuan identitypengguna. Otorisasi adalah proses untuk menentukan apakah pengguna memiliki akses ke sumber daya. Di ASP.NET Core, autentikasi ditangani oleh layanan autentikasi, IAuthenticationService, yang digunakan oleh middleware autentikasi. Layanan autentikasi menggunakan penangan autentikasi terdaftar untuk menyelesaikan tindakan terkait autentikasi. Contoh tindakan terkait autentikasi meliputi:
- Mengautentikasi pengguna.
- Merespons saat pengguna yang tidak diautentikasi mencoba mengakses sumber daya yang dibatasi.
Penangan autentikasi terdaftar dan opsi konfigurasinya disebut "skema".
Skema autentikasi ditentukan dengan mendaftarkan layanan autentikasi di Startup.ConfigureServices
:
- Dengan memanggil metode ekstensi khusus skema setelah panggilan ke AddAuthentication (seperti AddJwtBearer atau AddCookie, misalnya). Metode ekstensi ini menggunakan AuthenticationBuilder.AddScheme untuk mendaftarkan skema dengan pengaturan yang sesuai.
- Dan terkadang, dengan menelepon
AuthenticationBuilder.AddScheme
secara langsung.
Misalnya, kode berikut mendaftarkan layanan dan penangan autentikasi untuk cookie dan skema autentikasi token pembawa JWT:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
options => Configuration.Bind("JwtSettings", options))
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options => Configuration.Bind("CookieSettings", options));
Parameter AddAuthentication
JwtBearerDefaults.AuthenticationScheme adalah nama skema yang akan digunakan secara default saat skema tertentu tidak diminta.
Jika beberapa skema digunakan, kebijakan otorisasi (atau atribut otorisasi) dapat menentukan skema autentikasi (atau skema) yang mereka andalkan untuk mengautentikasi pengguna. Dalam contoh di atas, skema autentikasi cookie dapat digunakan dengan menetapkan namanya (CookieAuthenticationDefaults.AuthenticationScheme secara default, meskipun nama yang berbeda dapat diberikan saat memanggil AddCookie
).
Dalam beberapa kasus, panggilan ke AddAuthentication
secara otomatis dilakukan dengan metode ekstensi lainnya. Misalnya, saat menggunakan ASP.NET Core Identity, AddAuthentication
dipanggil secara internal.
Middleware Autentikasi ditambahkan di Startup.Configure
dengan memanggil UseAuthentication. Memanggil UseAuthentication
akan mendaftarkan middleware yang menggunakan skema autentikasi yang terdaftar sebelumnya. Panggil UseAuthentication
sebelum middleware apa pun yang bergantung pada pengguna yang diautentikasi. Saat menggunakan perutean titik akhir, panggilan ke UseAuthentication
harus dilakukan:
- Setelah UseRouting, sehingga informasi rute tersedia untuk keputusan autentikasi.
- Sebelum UseEndpoints, agar pengguna diautentikasi sebelum mengakses titik akhir.
Konsep autentikasi
Autentikasi bertanggung jawab untuk menyediakan ClaimsPrincipal otorisasi untuk membuat keputusan izin. Ada beberapa pendekatan skema autentikasi untuk memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar:
- Skema autentikasi
- Skema autentikasi default, dibahas di bagian selanjutnya.
- Atur langsung HttpContext.User.
Tidak ada pemeriksaan skema secara otomatis. Jika skema default tidak ditentukan, skema harus ditentukan dalam atribut otorisasi, jika tidak, kesalahan berikut akan muncul:
InvalidOperationException: Tidak ada autentikasiScheme yang ditentukan, dan tidak ada DefaultAuthenticateScheme yang ditemukan. Skema default dapat diatur menggunakan AddAuthentication(string defaultScheme) atau AddAuthentication(Action<AuthenticationOptions> configureOptions).
Skema autentikasi
Skema autentikasi dapat memilih penangan autentikasi mana yang bertanggung jawab untuk membuat kumpulan klaim yang benar. Untuk informasi lebih lanjut, lihat Otorisasi dengan skema tertentu.
Skema autentikasi adalah nama yang sesuai dengan:
- Penangan autentikasi.
- Opsi untuk mengonfigurasi instans khusus dari penangan.
Skema berguna sebagai mekanisme untuk merujuk pada perilaku autentikasi, permintaan, dan larangan dari penangan terkait. Misalnya, kebijakan otorisasi dapat menggunakan nama skema untuk menentukan skema autentikasi (atau skema) mana yang harus digunakan untuk mengautentikasi pengguna. Saat mengonfigurasi autentikasi, menentukan skema autentikasi default adalah hal yang umum. Skema default digunakan kecuali jika sumber daya meminta skema tertentu. Anda juga dapat:
- Menentukan skema default yang berbeda untuk mengautentikasi, meminta, dan melarang tindakan.
- Gabungkan beberapa skema menjadi satu menggunakan skema kebijakan.
Penangan autentikasi
Penangan autentikasi:
- Adalah jenis yang menerapkan perilaku skema.
- Berasal dari IAuthenticationHandler atau AuthenticationHandler<TOptions>.
- Memiliki tanggung jawab utama untuk mengautentikasi pengguna.
Berdasarkan konfigurasi skema autentikasi dan konteks permintaan yang masuk, penangan autentikasi:
- AuthenticationTicket Buat objek yang mewakili pengguna identity jika autentikasi berhasil.
- Mengembalikan 'tidak ada hasil' atau 'gagal' jika autentikasi tidak berhasil.
- Memiliki metode untuk tantangan dan tindakan terlarang ketika pengguna mencoba mengakses sumber daya:
- Pengguna tidak berhak untuk mengakses (melarang).
- Ketika pengguna tidak diautentikasi (diminta).
RemoteAuthenticationHandler<TOptions>
vs AuthenticationHandler<TOptions>
RemoteAuthenticationHandler<TOptions> adalah kelas untuk autentikasi yang memerlukan langkah autentikasi jarak jauh. Saat langkah autentikasi jarak jauh selesai, penangan memanggil kembali ke CallbackPath
yang diatur oleh penangan. Penangan menyelesaikan langkah autentikasi menggunakan informasi yang diteruskan ke jalur panggilan balik HandleRemoteAuthenticateAsync. OAuth 2.0 dan OIDC keduanya menggunakan pola ini. JWT dan cookie tidak karena mereka dapat langsung menggunakan header pembawa dan cookie untuk mengautentikasi. Penyedia yang dihosting dari jarak jauh dalam hal ini:
- Merupakan penyedia autentikasi.
- Contohnya termasuk Facebook, Twitter, Google, Microsoft, dan penyedia OIDC lainnya yang menangani autentikasi pengguna menggunakan mekanisme penangan.
Autentikasi
Tindakan autentikasi skema autentikasi bertanggung jawab untuk membangun pengguna identity berdasarkan konteks permintaan. Ini mengembalikan yang AuthenticateResult menunjukkan apakah autentikasi berhasil dan, jika demikian, pengguna berada identity dalam tiket autentikasi. Lihat AuthenticateAsync. Contoh autentikasi meliputi:
- cookie Skema autentikasi yang membangun pengguna identity dari cookie.
- Skema pembawa JWT mendeserialisasi dan memvalidasi token pembawa JWT untuk membangun pengguna identity.
Latihan
Permintaan autentikasi dipanggil oleh Otorisasi ketika pengguna yang tidak diautentikasi meminta titik akhir yang memerlukan autentikasi. Permintaan autentikasi diterbitkan, misalnya, ketika pengguna anonim meminta sumber daya terbatas atau mengikuti tautan masuk. Otorisasi memanggil permintaan menggunakan skema autentikasi yang ditentukan, atau default jika tidak ada yang ditentukan. Lihat ChallengeAsync. Contoh permintaan autentikasi meliputi:
- Skema autentikasi cookie mengalihkan pengguna ke halaman masuk.
- Skema token pembawa JWT mengembalikan hasil 401 dengan header
www-authenticate: bearer
.
Tindakan permintaan harus memberi tahu pengguna mekanisme autentikasi apa yang digunakan untuk mengakses sumber daya yang diminta.
Larangan
Tindakan melarang skema autentikasi dipanggil oleh Otorisasi ketika pengguna yang diautentikasi mencoba mengakses sumber daya yang tidak diizinkan untuk mereka akses. Lihat ForbidAsync. Contoh larangan autentikasi meliputi:
- Skema autentikasi cookie yang mengalihkan pengguna ke halaman yang menunjukkan bahwa akses dilarang.
- Skema token pembawa JWT mengembalikan hasil 403.
- Skema autentikasi khusus yang mengalihkan ke halaman tempat pengguna dapat meminta akses ke sumber daya.
Tindakan larangan dapat memberi tahu pengguna:
- Mereka diautentikasi.
- Mereka tidak diizinkan untuk mengakses sumber daya yang diminta.
Lihat tautan berikut untuk mengetahui perbedaan antara permintaan dan larangan:
Penyedia autentikasi per penyewa
Kerangka ASP.NET Core tidak memiliki solusi bawaan untuk autentikasi multi-penyewa. Meskipun pelanggan dapat menulis aplikasi dengan autentikasi multi-penyewa, sebaiknya gunakan salah satu kerangka kerja aplikasi asp.net core berikut yang mendukung autentikasi multi-penyewa:
Orchard Core
Orchard Core. Lihat sumber Orchard Core untuk contoh penyedia autentikasi per penyewa.
Kerangka Kerja ABP
Kerangka Kerja ABP mendukung berbagai pola arsitektur termasuk modularitas, layanan mikro, desain berbasis domain, dan multi-penyewa. Lihat sumber Kerangka Kerja ABP di GitHub.
Sumber Daya Tambahan:
ASP.NET Core