Bagaimana kita mendapatkan pengguna saat ini, dalam tindakan ApiController yang aman, tanpa meneruskan userName atau userId sebagai parameter?
Kami berasumsi bahwa ini tersedia, karena kami berada dalam tindakan yang aman. Berada dalam tindakan aman berarti pengguna telah mengautentikasi dan permintaan memiliki token pembawa-nya. Mengingat bahwa WebApi telah mengotorisasi pengguna, mungkin ada cara bawaan untuk mengakses userId, tanpa harus meneruskannya sebagai parameter tindakan.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
sumber
sumber
Jawaban:
Di WebApi 2 Anda bisa menggunakan
RequestContext.Principal
dari dalam metode di ApiControllersumber
using Microsoft.AspNet.Identity;
Anda juga dapat mengakses kepala sekolah menggunakan
User
properti diApiController
.Jadi dua pernyataan berikut pada dasarnya sama:
sumber
Petunjuk terletak pada pengontrol akun yang dibuat otomatis Webapi2
Tetapkan properti ini dengan getter sebagai
dan untuk mendapatkan UserManager - Dalam WebApi2-lakukan seperti yang dilakukan Roma (baca sebagai AccountController)
Ini harus kompatibel dalam IIS dan mode self host
sumber
Tidak ada saran di atas yang berhasil untuk saya. Berikut ini lakukan!
Saya kira ada banyak variasi skenario dan yang satu ini berhasil untuk saya. Skenario saya melibatkan frontend AngularJS dan aplikasi backend Web API 2, keduanya berjalan di bawah IIS. Saya harus mengatur kedua aplikasi untuk berjalan secara eksklusif di bawah Otentikasi Windows.
Tidak perlu memberikan informasi pengguna apa pun. Browser dan IIS pertukaran kredensial pengguna logon dan API Web memiliki akses ke kredensial pengguna sesuai permintaan (dari IIS saya kira).
sumber
Jawaban Karan Bhandari bagus, tetapi AccountController yang ditambahkan dalam sebuah proyek sangat mungkin a
Mvc.Controller
. Untuk mengkonversi jawabannya untuk digunakan dalam perubahan ApiControllerHttpContext.Current.GetOwinContext()
untukRequest.GetOwinContext()
dan pastikan Anda telah menambahkan 2 berikutusing
pernyataan:sumber
Dalam .Net Core digunakan
User.Identity.Name
untuk mendapatkan klaim Nama pengguna.sumber
User.Identity.Name
mendapatkan nilai dari klaim nama . Ini bukan khusus Active Directory.Jika Anda menggunakan Asp.Identity UseManager, ini otomatis menetapkan nilai
berdasarkan IdentityUser yang Anda gunakan dalam membuat IdentityDbContext .
Jika pernah Anda menerapkan tabel pengguna khusus dan otentikasi pembawa token owin, silakan periksa jawaban saya.
Bagaimana cara mendapatkan konteks pengguna selama panggilan Api Web?
Semoga masih membantu. :)
sumber
Atau berdasarkan komentar Darrel Miller, mungkin gunakan ini untuk mengambil HttpContext terlebih dahulu.
Lihat juga:
Cara mengakses HTTPContext dari dalam tindakan API Web Anda
sumber