PDA

View Full Version : سوال: مشکل در web api



sonicuser
یک شنبه 09 آبان 1395, 12:15 عصر
سلام دوستان من یک پروژه web api دارم که توی اون همه چیز اوکیه غیر از اون قسمتی که کاربرم رو باید بفرستم به درگاه بانکی

تو این پروژه برای شناسایی کاربر از bearer token استفاده کردم که خیلی ساده توی api controller ها کاربر جاری رو تشخیص میدم

اما مشکل اینجاست که توی controller معمولی نمیتونم کاربر رو شناسایی کنم و همیشه
HttpContext.User.Identity.GetUserId();
خالی بر میگرده

آیا راهی هست که من از همون web api کاربرم رو به درگاه بانک منتقل کنم یا اگر نیست چطور تو controller کاربر رو شناسایی کنم؟؟

Moien Tajik
یک شنبه 09 آبان 1395, 17:20 عصر
با استفاده از User.Identity.Name و RequestContext.Principal.Identity.GetUserId میشه اطلاعات یک کاربر رو گرفت .

در اینجا روش های دیگه ای برای پیدا کردن کاربر جاری گفته شده که اگر روش های بالا جواب نداد میتونید ازشون استفاده کنید : http://stackoverflow.com/questions/21616951/get-the-current-user-within-an-apicontroller-action-without-passing-the-userid

hakim22
چهارشنبه 12 آبان 1395, 07:29 صبح
اگه قراره نیست از Api به صورت یک وب سرویس بیرونی استفاده کنید نیازی به Token ندارید. Authorize در WebApi مشابه MVC عمل میکنه و از کوکی اطلاعات رو میخونه. وقتی به توکن نیاز دارید که سایت دیگر یا نرم افزار جدا از نرم افزار اصلی نیاز به دریافت اطلاعات از سایت شما داره. چون دیگه به کوکی های مرورگر دسترسی نداره باید توکن بگیره.

در این صورت بهتره پروژه ی WebApi رو از پروژه ی وب اصلی جدا کنید و برای اون تنظیم کنید که از Token استفاده کنه(همین تنظیمات رو به اون پروژه ببرید) و برای پروژه ی اصلی از Cookie Authorization استفاده کنید(که حالت پیشفرض پروژه هست)

اگه میخواهید مشکل رو به همین صورت که هست حل کنید باید توکن رو به همراه هدر هر رکوست به سرور بفرستید یا چون تشخیص هویت کاربر از طریق خودن توکن از هدر بدست میاد و نه از کوکی.

در کل روش کوکی برای پروژههای وب خیلی بهتر است. سرعت و امنیتی بیشتری هم داره. ضمن اینکه مدیریت Api وقتی در یک پروژه ی جدا باشه ساده تره.