معرفی Web API Authentication

برای اعمال احراز هویت باید در صورت موفقیت آمیز بودن Login ،  یک Token را تولید کرده و آن را به سمت Client فرستاد. Client با استفاده از Token دریافت شده می تواند درخواست های بعدی را بفرستد. اگر Token معتبر نباشد با پیغام خطا و یا Status Code شماره 401  مواجه می شود. یکی از بهترین راه ها برای  تولید Token استفاده از یک Nuget به نام JWT می باشد.

مثال: اگر بخواهید تنها درخواست هایی که احراز هویت شده اند بتوانند پردازش شوند. ابتدا باید درخواستی تحت عنوان لاگین به سمت سرور فرستاده بفرستید. در این درخواست نام کاربری Ali و رمز عبور Pass@123 است.

اولین قدم نصب JWT است. به سراغ پنجره ی Nuget Manager رفته و این عبارت را جستجو کرده و آن را نصب کنید.

Microsoft.AspNetCore.Authentication.JwtBearer

حال به سراغ فایل appsettings.json رفته و کد زیر را به آن اضافه کنید. در قسمت Secret، کلید اصلی خود را بنویسید که می خواهید رمزنگاری بر اساس آن انجام شود.

سپس در Controller تغییرات مورد نظر زیر را اعمال کنید. (Configuration را به Constructor تزریق کنید.)

کلاس Login Model را مانند زیر بنویسید.

اکشن Login را مطابق زیر بنویسید. کد زیر در صورت درست بودن نام کاربری و رمز عبور، یک Token تولید می کند و به Client می فرستد.

سپس در فایل Startup.cs در متد ConfigueServices کد های زیر را اضافه کنید.

در متد Configue هم کد های زیر را اضافه کنید.

بعد از آن نوبت به نوشتن اکشن Get می رسد. قرار است در صورت احراز شدن هویت، این متد اجرا شود. در کنترلر مورد نظر، اکشن Get را مانند زیر بنویسید. به attribute بالای متد دقت کنید. Authorize باعث می شود که تنها در صورت موفقیت آمیز بودن احراز هویت، اکشن Get اجرا شود. در غیر این صورت با خطای 401 مواجه می شوید.

حال نوبت تست API در برنامه ی Postman می رسد. مطابق شکل زیر درخواست Login را به سمت API بفرستید. در صورت موفقیت در Response می توان token تولید شده را دید.

برای ارسال درخواست Get به API با استفاده از Token به دست آمده، باید ابتدا مقدار Token  را کپی کرده و مطابق شکل زیر در قسمت Authorization ، نوع را Bearer Token انتخاب کرده و مقدار Token را در فید Token الصاق کرد.

در صورت معتبر بودن Token ، اکشن Get اجرا می شود و نتیجه ی درخواست نشان داده می شود.

برای اطمینان از اینکه Token تولید شده معتبر است یا خیر، باید در وبسایت JWT.io مقدار Token را Decode کرد.

ذخیره Token

تا اینجای کار، تولید توکن، ارسال توکن به کلاینت، ارسال توکن به API همراه هر درخواست را بررسی کردیم. توکن ای که بعد از عملیات Login یا Register به سمت کلاینت فرستاده می شود باید در جایی ذخیره شود تا بتوان در درخواست های بعدی از آن استفاده کرد. سه راه برای ذخیره کردن توکن وجود دارد:

  • Cookie
  • Session Storage
  • Local Storage
Cookie

کوکی ها به صورت داده های متنی که متشکل از 5 فیلد متغیر-طول ( variable-length) است ، می باشند:

  • Expires : داده های کوکی منقضی می شوند. اگر این فیلد خالی باشد ، کوکی زمانی که بازدید کننده مرورگر را می بندد ، منقضی می شود.
  • Domain : نام دامنه وب سایت می باشد.
  • Path : مربوط به مسیر دایرکتوری یا وب سایتی است که کوکی را تنظیم می نماید. این فیلد ، در صورتی که بخواهید کوکی را از دایرکتوری یا صفحه دیگری بازیابی کنید ، خالی می ماند.
  • Secure : اگر این فیلد حاوی کلمه “secure” باشد ، کوکی فقط ممکن است با سرور secure بازیابی شود. اگر این فیلد خالی باشد ، چنین محدودیتی وجود ندارد.
  • Name= Value : کوکی در قالب جفت های key-value تنظیم و بازیابی می شوند.
نوشتن کوکی

برای ایجاد و ذخیره کوکی می توان از کد زیر در زبان جاوا اسکریپت استفاده کرد.

کوکی ها ممکن است شامل سمیکالن، کاما یا فاصله نباشند در این صورت به احتمال قوی Encode شده اند. با استفاده از متد escape() می توان مقدار کوکی را کدگذاری کرد و با متد unescape() می توان در هنگام خواندن کوکی مقدار آن را رمزگشایی کرد.

خواندن کوکی

تاریخ انقضاء کوکی

حذف کوکی

برای حذف کوکی تنها کافی است تاریخ انقضاء آن را به گذشته تغییر داد.

Local Storage

حافظه ای برای ذخیره سازی به صورت Key-Value در مرورگر است. و نسبت به کوکی ها فضای بیشتری برای ذخیره سازی دارد (تقریبا 10 مگابایت)

ایجاد مقدار

خواندن مقدار

بروزرسانی مقدار

حذف مقدار

خالی کردن تمام Local Storage

ذخیره با فرمت JSON در Local Storage

Session Storage

حافظه ای برای ذخیره سازی اطلاعات در مرورگر است. شبیه Cookie عمل می کند با این تفاوت که با بستن مرورگر اطلاعات درون آن از بین می رود.

ایجاد مقدار

خواندن مقدار

حذف یک Session خاص از Session Storage

حذف کل Session های موجود در Session Storage

Local Storage و Session Storage در این موارد شبیه هم هستند:

  • داده ها به صورت محلی یا اوکال ذخیره می شوند و توسط سرور قابل خواندن نیستند.
  • هر دو اجازه می دهند تا داده های بسیار بیشتری ذخیره شود (10 مگابایت برای اکثر مرورگرها).
  • استفاده از آن ساده است.

مقایسه Local Storage با Session Storage

وظیفه ی Local Storage و Session Storage یکسان است، اما در Session Storage داده ها فقط تا زمانی که پنجره یا تب مرورگر بسته شود ، وجود دارند، در حالی که در Local Storage داده ها وجود  دارند تا زمانی که کاربر یا به طور دستی  حافظه نهان مرورگر را پاک کند و یا برنامه وب اقدام به پاک کردن آن بنماید.

نوشته شده توسط mrbitmap علیرضا علی رمضانی

مقالات مرتبط

جدیدترین مقالات

فهرست