
Basic Authentication (احراز هویت پایه) ، در این مقاله در رابطه با احراز هویت پایه، نحوه ی فراخوانی متدهای API با استفاده از postman ، و مصرف API با استفاده از jQuery Ajax ، بحث خواهیم کرد.
Basic Authentication ،برای حفاظت برنامه ها و وبسایت های ما از دسترسی تأیید نشده به کار می رود و همچنین، دسترسی کاربران به اطلاعات ابزارهایی مانند postman و fiddler را محدود می کند.
جهت دسترسی به متد Web API ، باید اعتبارنامه های کاربر را به هدر درخواست ارسال کنیم.
اگر اعتبارنامه های کاربر را به هدر درخواست ارسال نکنیم، سرور کد وضعیت ۴۰۱ (تأیید نشده) ، بیانگر اینکه سرور از 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 دو پارامتر دارد:
اگر متدها 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 در هدر درخواست می زنیم، این کار کد وضعیت ۴۰۱ را برخواهد گرداند.

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

برای دسترسی به متد 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>
برچسب:
نویسنده: دانلودی