اکنون در ادامه قصد داریم این موارد را تبدیل به چندین درخواست به هم مرتبط postman کرده و در نهایت آنها را به صورت یک collection قابل آزمایش مجدد، ذخیره کنیم.
مرحله 1: خاموش کردن بررسی مجوز SSL برنامه
چون مجوز SSL برنامههای ASP.NET Core که در حالت local اجرا میشوند از نوع
self-signed certificate است، توسط postman پردازش نخواهند شد. به همین جهت نیاز است به منوی File -> Settings آن مراجعه کرده و این بررسی را خاموش کنیم:
مرحله 2: ایجاد درخواست login و دریافت توکنها
در اینجا این مراحل طی شدهاند:
- ابتدا آدرس درخواست به https://localhost:5001/api/account/login تنظیم شدهاست.
- سپس نوع درخواست نیز به Post تغییر کردهاست.
- چون اکنون نوع درخواست، Post است، میتوان بدنهی آنرا مقدار دهی کرد و چون نوع آن JSON است، گزینهی raw و سپس contentType صحیح انتخاب شدهاند. در ادامه مقدار زیر تنظیم شدهاست:
{
"username": "Vahid",
"password": "12345"
}
این مقداریاست که
اکشن متد login میپذیرد. البته اگر برنامه را اجرا کنید، کلمهی عبور پیشفرض آن 1234 است.
- پس از این تنظیمات اگر بر روی دکمهی send کلیک کنیم، توکنهای دریافتی را در قسمت response میتوان مشاهده کرد.
مرحلهی 3: ذخیره سازی توکنهای دریافتی در متغیرهای سراسری
برای دسترسی به منابع محافظت شدهی سمت سرور، نیاز است access_token را به همراه هر درخواست، به سمت سرور ارسال کرد. بنابراین نیاز است در همینجا این دو توکن را در متغیرهایی برای دسترسی بعدی، ذخیره کنیم:
var jsonData = pm.response.json();
pm.globals.set("access_token", jsonData.access_token);
pm.globals.set("refresh_token", jsonData.refresh_token);
محل تعریف این کدها نیز در قسمت Tests درخواست جاری است تا پس از پایان کار درخواست، اطلاعات آن استخراج شده و ذخیره شوند.
مرحلهی 3: ذخیره سازی مراحل انجام شده
برای این منظور، بر روی دکمهی Save کنار Send کلیک کرده، نام Login را وارد و سپس یک Collection جدید را با نام دلخواه JWT Sample ایجاد میکنیم:
سپس این درخواست را در این مجموعه ذخیره خواهیم کرد.
مرحلهی 4: دسترسی به منابع محافظت شدهی سمت سرور
برای این منظور بر روی دکمهی + موجود در کنار اولین برگهای که مشغول به تکمیل آن هستیم، کلیک میکنیم تا یک برگهی جدید ایجاد شود. سپس مشخصات آن را به صورت زیر تکمیل خواهیم کرد:
ابتدا آدرس درخواست از نوع Get را به https://localhost:5001/api/MyProtectedApi تنظیم خواهیم کرد.
سپس گزینهی هدرهای این درخواست را انتخاب کرده و key/value جدیدی با مقادیر Authorization و Bearer {{access_token}} ایجاد میکنیم. در اینجا {{access_token}} همان متغیر سراسری است که پس از لاگین، تنظیم میشود. اکنون از این متغیر جهت تنظیم هدر Authorization استفاده کردهایم.
در آخر اگر بر روی دکمهی Send این درخواست کلیک کنیم، response فوق را میتوان مشاهده کرد.
فراخوانی مسیر api/MyProtectedAdminApi نیز دقیقا به همین نحو است.
یک نکته: روش دومی نیز برای تنظیم هدر Authorization در postman وجود دارد. برای این منظور، گزینهی Authorization یک درخواست را انتخاب کنید (تصویر زیر). سپس نوع آنرا به Bearer token تغییر دهید و مقدار آنرا به همان متغیر سراسری {{access_token}} تنظیم کنید. به این صورت هدر مخصوص JWT را به صورت خودکار ایجاد و ارسال میکند و در این حالت دیگر نیازی به تنظیم دستی برگهی هدرها نیست.
مرحلهی 5: ارسال Refresh token و دریافت یک سری توکن جدید
این مرحله، نیاز به ارسال anti-forgery token را هم دارد و گرنه از طرف سرور و برنامه، برگشت خواهد خورد. اگر به کوکیهای تنظیم شدهی توسط برگهی لاگین دقت کنیم:
کوکی با نام XSRF-TOKEN نیز تنظیم شدهاست. بنابراین آنرا توسط متد pm.cookies.get، در قسمت Tests برگهی لاگین خوانده و در یک متغیر سراسری تنظیم میکنیم:
var jsonData = pm.response.json();
pm.globals.set("access_token", jsonData.access_token);
pm.globals.set("refresh_token", jsonData.refresh_token);
pm.globals.set('XSRF-TOKEN', pm.cookies.get('XSRF-TOKEN'));
سپس برگهی جدید ایجاد درخواست refresh token به صورت زیر تنظیم میشود:
ابتدا در قسمت بدنهی درخواست از نوع post به آدرس https://localhost:5001/api/account/RefreshToken، در قسمت raw آن، با انتخاب نوع json، این refresh token را که در قسمت لاگین خوانده و ذخیره کرده بودیم، به سمت سرور ارسال خواهیم کرد:
همچنین دو هدر زیر را نیز باید ارسال کنیم:
یکی هدر مخصوص Authorization است که در مورد آن بحث شد و دیگر هدر
X-XSRF-TOKEN که در سمت سرور بجای anti-forgery token پردازش میشود. مقدار آنرا نیز در برگهی login با خواندن کوکی مرتبطی، پیشتر تنظیم کردهایم که در اینجا از متغیر سراسری آن استفاده شدهاست.
اکنون اگر بر روی دکمهی send این برگه کلیک کنید، دو توکن جدید را دریافت خواهیم کرد:
که نیاز است مجددا در برگهی Tests آن، متغیرهای سراسری پیشین را بازنویسی کنند. به همین جهت دقیقا همان 4 سطری که اکنون در برگهی Tests درخواست لاگین وجود دارند، باید در اینجا نیز تکرار شوند تا عملیات refresh token واقعا به تمام برگههای موجود، اعمال شود.
مرحلهی آخر: پیاده سازی logout در اینجا نیاز است refreshToken را به صورت یک کوئری استرینگ به سمت سرور ارسال کرد که به کمک متغیر {{refresh_token}}، در برگهی params تعریف میشود:
همچنین هدر Authorization را نیز باید درج کرد:
پس از آن اگر درخواست را رسال کنیم، یک true را باید بتوان در response مشاهده کرد:
ذخیره سازی مجموعهی جاری به صورت یک فایل JSON
برای گرفتن خروجی از این مجموعه و به اشتراک گذاشتن آن، اگر اشارهگر ماوس را بر روی نام یک مجموعه حرکت دهیم، یک دکمهی جدید با برچسب ... ظاهر میشود. با کلیک بر روی آن، یکی از گزینههای آن، export نام دارد که جزئیات تمام درخواستهای یک مجموعه را به صورت یک فایل JSON ذخیره میکند. برای نمونه فایل JSON خروجی این قسمت را میتوانید از اینجا دریافت کنید:
JWT-Sample.postman_collection.json