Basic Authentication

Basic Authentication (احراز هویت پایه) ، در این مقاله در رابطه با احراز هویت پایه، نحوه ی فراخوانی متدهای API با استفاده از postman ، و مصرف API با استفاده از jQuery Ajax ، بحث خواهیم کرد.

Basic Authentication ،برای حفاظت برنامه ها و وبسایت های ما از دسترسی تأیید نشده به کار می رود و همچنین، دسترسی کاربران به اطلاعات ابزارهایی مانند postman و fiddler را محدود می کند.

جهت دسترسی به متد Web API ، باید اعتبارنامه های کاربر را به هدر درخواست ارسال کنیم.

اگر اعتبارنامه های کاربر را به هدر درخواست ارسال نکنیم، سرور کد وضعیت ۴۰۱ (تأیید نشده) ، بیانگر اینکه سرور از Basic Authentication پشتیبانی می کند، را برمی گرداند.

دستیابی به Basic Authentication

مراحل زیر را برای Basic Authentication دنبال کنید:

مرحله ۱

بیایید یک کلاس BasicAuthenticationAttribute که از (;AuthorizationFilterAttribute (namespace System.Web.Http.Filters ارث برده و متد OnAuthorization از کلاس پایه (AuthorizationFilterAttribute) را بازنویسی می کند، ایجاد کنیم.

متد OnAuthorization یک پارامتر action-context دارد که دسترسی به شیء درخواست و پاسخ را فراهم می کند.

کد

namespace BasicAuthentication  
  
   public class BasicAuthenticationAttribute : AuthorizationFilterAttribute  
   {  
       public override void OnAuthorization(HttpActionContext actionContext)  
       {  
           base.OnAuthorization(actionContext);  
       }  
   }  

حال از شیء actionContext برای بررسی اینکه آیا هدر درخواست null است یا خیر، استفاده میکنیم. اگر null باشد، کد وضعیت ۴۰۱ (تأیید نشده) را برمیگردانیم؛ اگر null نباشد، از پارامتر تأیید هدر درخواست برای تأیید استفاده می کنیم و این پارامترها بصورت رشته ی base64-encoded (کدگذاری شده بصورت base64) “Usename: Password” فرمت بندی می شوند.

کد

public override void OnAuthorization(HttpActionContext actionContext)  
       {  
           if (actionContext.Request.Headers.Authorization != null)  
           {  
               var authToken = actionContext.Request.Headers  
                   .Authorization.Parameter;  
  
               // decoding authToken we get decode value in 'Username:Password' format  
               var decodeauthToken = System.Text.Encoding.UTF8.GetString(  
                   Convert.FromBase64String(authToken));  
  
               // spliting decodeauthToken using ':'   
               var arrUserNameandPassword = decodeauthToken.Split(':');  
  
               // at 0th postion of array we get username and at 1st we get password  
               if (IsAuthorizedUser(arrUserNameandPassword[0], arrUserNameandPassword[1]))  
               {  
                   // setting current principle  
                   Thread.CurrentPrincipal = new GenericPrincipal(  
                   new GenericIdentity(arrUserNameandPassword[0]), null);  
               }  
               else  
               {  
                   actionContext.Response = actionContext.Request  
                   .CreateResponse(HttpStatusCode.Unauthorized);  
               }  
           }  
           else  
           {  
               actionContext.Response = actionContext.Request  
                .CreateResponse(HttpStatusCode.Unauthorized);  
           }  
       }  

اکنون، نیاز است مقدار base64-encoded را رمزگشایی و با استفاده از ‘:’ جداسازی کنیم.

پس از جداسازی، نام کاربری را در جایگاه صفرم و رمز عبور را در جایگاه یکم بدست می آوریم.

سپس، نام کاربری و رمز عبور را به متد زیر جهت بررسی اینکه آیا یک کاربر تأیید شده است یا خیر، ارسال می کنیم.

public static bool IsAuthorizedUser(string Username, string Password)  
       {  
           // In this method we can handle our database logic here...  
           return Username == "bhushan" && Password == "demo";  
       }  

اگر متد بالا true (درست) را برگرداند، Generic Principle (قانون/اصل عمومی) را ایجاد می کنیم و آن را بر روی currentprinciple (قانون/اصل فعلی) تنظیم می کنیم.

generic principle دو پارامتر دارد:

  • GenericIdentity
  • Roles

اگر متدها false (نادرست) را برگردانند، کد وضعیت ۴۰۱ (تأیید نشده) را برمی گردانیم.

می توانیم BasicAuthenticationAttribute را بطور سراسری، در Controller و View تعریف کنیم.

برای تعریف احراز هویت پایه، باید یک کنترل کننده ایجاد کنیم.

اگر بخواهیم بطور سراسری اعلان کنیم، آن را در WebApiConfig.cs اعلان خواهیم کرد.

config.Filters.Add(new BasicAuthenticationAttribute()); 

مرحله ۲

در این مرحله، بیایید یک کنترل کننده ساخته و متد Get را با BasicAuthentication تزئین کنیم.

کد

namespace BasicAuthentication.Controllers  
{  
     
    public class ValuesController : ApiController  
    {  
        [BasicAuthentication]  
        public string Get()  
        {  
            return "WebAPI Method Called";  
        }  
    }  
}    

هنگامیکه url (نشانی اینترنتی) را در postman بدون اضافه کردن Basic Authentication در هدر درخواست می زنیم، این کار کد وضعیت ۴۰۱ را برخواهد گرداند.

Basic Authentication

هنگامیکه authorization (تأیید) را اضافه کرده و اعتبارنامه ها را ارسال می کنیم، به ما اجازه ی دسترسی به متد Get و بازگردانی وضعیت ۲۰۰ را خواهد داد.

Basic Authentication

برای دسترسی به متد Web API فوق با استفاده از jQuery AJAX، از کد زیر استفاده کنید.

اسکریپت

<script type="text/javascript">  
        $.ajax({  
            type: 'GET',  
            url: "api/values/Get",  
            datatype: 'json',  
            headers:  
                {  
                    Authorization: 'Basic ' + btoa(username + ':' + password)  
                },  
            success: function (data) {  
            },  
            error: function (data) {  
            }  
        });          
 </script> 
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.