مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

shahidi

عضویت از 1394/03/31

آیا Basic Authentication برای web API2 باید کاربر در سطح سیستم عامل تعریف شده باشه؟

  • دوشنبه 10 آبان 1395
  • 01:10
تشکر میکنم

سلام

من یک 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 باید روش عرف دیگری را انتخاب کنم؟

ممنون

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 10 آبان 1395
  • 08:39

اگر اشتباه نکنم باید user در ویندوز سرور تعریف شده باشه

به نظر من بهتره برای امنیت WebApi از Token استفاده کنید

کاربر سایت

behruoz.faraji@gmail.com

عضویت از 1396/01/04

  • جمعه 4 فروردین 1396
  • 15:12
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);
        }
    }
}

این کلاس پیاده سازی شناسایی پایه کاربران را انجام می دهد که برای استفاده باید به عنوان اتریبیوته برروی کنترلر قرار دهید.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)