سلام
من یک web api نوشتم با basic authentication و با fiddler تست کردم روی visual studio درست عمل می کنه و روی IIS local هم بدرستی فرایند authentication basic انجام میشه ولی وقتی روی host بیرونی در یک زیر دامنه مثلا xxx.yyyy.ir upload کردم با اینکه basic authentication رو برای اون دامنه فعال کرده مسئول هاست عملیات authentication انجام نمیشه . و صفحه prompt دریافت user/pass روی مرورگر پشت سر هم ظاهر میشه.
به مدیر هاست گفتم روی iis داخلی تست گرفتم درسته و پنجره user/pass مرورگر تنها یک بار می اید و با وارد کردن نام کاربری عملیات به درستی انجام و پاسخ بر میگرداند ولی ، ایشان گفته اند که basic authentication بر اساس این ریفرنس
https://www.asp.net/web-api/overview/security/basic-authentication
نیاز به تعریف نام کاربری در سطح سیستم عامل هاست دارد و امکان پذیر نیست. هاست دامنه windows و iis می باشد.
راه حل چیست ؟
آیا برای authentication با http در web api باید روش عرف دیگری را انتخاب کنم؟
ممنون
اگر اشتباه نکنم باید user در ویندوز سرور تعریف شده باشه
به نظر من بهتره برای امنیت WebApi از Token استفاده کنید
using System; using System.Net; using System.Net.Http; using System.Security.Principal; using System.Threading; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace WebApplication2.Models { public class BasicAuthenticatinAttribute : AuthorizationFilterAttribute { public override void OnAuthorization(HttpActionContext actionContext) { if (actionContext.Request.Headers.Authorization == null) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); } else { string token = actionContext.Request.Headers.Authorization.Parameter; string decode = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(token)); string[] userAndPass = decode.Split(':'); string user = userAndPass[0]; string pass = userAndPass[1]; if (user.Equals("Admin") && pass.Equals("12345")) { Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(user), null); } else { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); } } base.OnAuthorization(actionContext); } } }
این کلاس پیاده سازی شناسایی پایه کاربران را انجام می دهد که برای استفاده باید به عنوان اتریبیوته برروی کنترلر قرار دهید.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)