طراحی سایت, ساخت ربات تلگرام, آموزش php , سورس کد php ,سورس ربات تلگرام , سورس فروشگاه اینترنتی , آموزش طراحی وب

معرفی احراز هویت Token در php


معرفی احراز هویت Token در php

در این آموزش قصد معرفی احراز هویت Token در php را داریم .احراز هویت یکی از مهم‌ترین قسمت‌های هر اپلکیشن تحت وب هست که ما از این طریق می توانیم دسترسی های خاصی را به کاربر اختصاص بدیم .

ولی همانطور که میدانید HTTP یک پروتکل stateless است و نمی تواند تشخیص دهد که کاربر قبلا این درخواست را ارسال کرده و یا چه کسی این صفحات را مرور کرده است برای همین یک مورد به نام state management مطرح است تا بتوانیم کاربران را از هم تفکیک و دسترسی هایی را برای آنها فراهم کنیم .

هر درخواستی که از طرف کلاینت ارسال می شود باید شامل اطلاعاتی برای ادامه پروسه درخواست (request) باشد که این اطلاعات می تواند نام کاربری و پسورد , کوکی ها , session id ذخیره شده در کوکی و یا توکن باشد .

 

در این مقاله آموزشی قصد داریم به شما روش دیگری برای احراز هویت کاربر معرفی کنیم و تفاوت آن را با روش استفاده از $_SESSION نشان دهیم

تفاوت احراز هویت Session و JWT

احراز هویت سیشن

  1. کاربر نام کاربری و کلمه عبور رو وارد و روی دکمه ورود کلیک میکنه .
  2.  بعد اینکه درخواست فرستاده شد، سمت back-end با استفاده از query گرفتن از دیتابیس هویت کاربر تصدیق میشه. و اگه اطلاعات درست بود یه session با استفاده از اطلاعات گرفته شده از دیتابیس ساخته میشه، و بعدش اطلاعات session تو هدر فرستاده میشد و session id تو مرورگر ذخیره میشه.
  3.  با اطلاعات session مرورگر درخواست اجازه دسترسی به مناطق ممنوعه اپلیکیشن رو میخواد.
  4. و اگه session درست و مطابق دیتابیس بود اپلیکیشن اجازه دسترسی و رندر صفحه html رو میده.

معرفی احراز هویت Token در php

همه چیز تا این نقطه داره خوب کار میکنه و اپلیکیشن یه سری قسمت‌های ممنوعه داره و کاربران با اجازه دسترسی در حال مشاهده اون قسمت‌ها هستن. حالا مشکل اونجاست که ما می‌خوایم یه کلاینت دیگه بسازیم مثل Android یا اپلیکیشن دسکتاپ ؟

حتما بخوانید  ساخت نطرسنجی با php و jquery ajax

آیا شما می‌تونید با این اپلیکیشنی که برای احراز هویت استفاده می‌کنید برای کلاینت های موبایل و … اجازه دسترسی به قسمت‌های اپلیکیشن رو بدید؟ اگه با همین روش بخواید احراز هویت کنید نمیشه، چرا ؟

به خاطر دو دلیل زیر :

  • session و cookie ها برای کلاینت‌های موبایل هیچ مفهومی نداره و شما نمی تونید session یا cookie رو با اپلکیشن موبایل به اشتراک بگذارید و استفاده کنید.
  • تو این سیستم جوابی که از طرف سرور میاد یه صفحه html هست و شما نیاز به JSON یا XML دارید تا اپلیکشن موبایل بتونه اونو پردازش کنه. تو این حالت شما یه سیستم مستقل از کلاینت دارید.

احراز هویت Token

تو سیستم احراز هویت بر اساس Token شما نمی‌تونید از session و cookie استفاده کنید. حالا بیاید سناریوی سیستم قبلی رو برای Token ریدیزاین کنیم، روش Token از الگوریتم زیر استفاده میکنه :

  1. کاربر نام کاربری و کلمه عبور رو وارد میکنه و روی دکمه ورود کلیک میکنه
  2. بعد اینکه درخواست فرستاده شد، در سمت back-end با استفاده از query گرفتن از دیتابیس هویت کاربر تصدیق میشه. و اگه اطلاعات درست بود یه token با استفاده از اطلاعات گرفته شده از دیتابیس ساخته میشه. و ما هم می‌تونیم این token رو سمت کلاینت ذخیره کنیم.
  3. هر دفعه همراه هر درخواست باید این token رو بفرستیم.
  4. اگه token فرستاده شده صحیح باشه اجازه دسترسی به اون قسمت اپلیکشین رو میدیم و در هدر جواب رو به صورت XML یا JSON میفرستیم.

ما تو این حالت دیگه نه session و نه cookie بر می گردونیم و نه صفحه html، این یعنی ما می‌تونیم از این ساختار برای هر اپلیکیشنی استفاده کنیم. شمای ساختار رو می تونید تو تصویر زیر ببنید.

معرفی احراز هویت Token در php

JWT چیست ؟

JWT مخفف Json Web Token و فرمتی برای استفاده از آن در  هدرهای احراز هویت است. این Token به شما کمک میکنه که ارتباط بین دو سیستم رو به صورت امن طراحی کنید. در این مطلب ما  JWT رو “bearer token” فرض میکنیم، bearer token شما از سه قسمت تشکیل شده :

  • header : نوع توکن و و همچنین الگوریتم رمزگذاری (type of signature) رو ذخیره میکنه که در مثال از رمزگذاری base-64 استفاده شده .
  • payload شامل اطلاعات هست . شما هر مدل داده‌ای از جمله اطلاعات یوزر و هر چی که می‌خواید رو می‌تونید به صورت رمزگذاری شده base-64 در اینجا ذخیره کنید.
  • signature شامل ترکیبheader , پی لود(payload)  و کلید رمز (secret key) هست. کلید رمز باید روی سرور به صورت امن نگه داشته بشه.
حتما بخوانید  کار با سیشن ها (آموزش SESSION در php)

ساختار JWT و یه مثال از Token در عکس زیر قابل مشاهده هست.

معرفی احراز هویت Token در php

JWT Header بالا نوع encoded object را به صورت JSON Web Token و همچنین الگوریتم تبدیل را HMAC SHA-256 نیز مشخص کرده است.

در این جا اولین بخش اطلاعات یک JSON Web Token را می توانید مشاهده کنید.

در این آموزش یک مفهوم کلی از JWT  و تفاوت های آن با روش سیشن و کوکی را نشان دادیم. و همانطور که دیدید ساختار احراز هویت Token بصورت JWT بسیار جالب و چالش برانگیز است و هنگامی که قصد استفاده از آن به صورت cross-platform بین اپلیکشن های اندروید و دسکتاب داریم می تواند بسیار کارا باشد.

 

در مقاله آموزشی بعد بطور عملی نحوه استفاده از JWT در احراز هویت REST API ها در php را خواهیم دید . (احراز هویت توکن در php با JWT)

هر سوالی در مورد احراز هویت Token در php داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

اگر مفید بود, لطفا به اشترک بگذارید تا دوستان دیگر نیز بهره ببرند

حسن شفیعی
مدرس ، پنتستر ، توسعه دهنده اپلیکیشن های تحت وب ، عضو مرکز حامی نخبگان و از مدیران و اعضای رسمی تیم امنیتی آشیانه هستم . علاقه خاصی به زبان php و امنیت شبکه و لینوکس دارم و هر روز تلاش می کنم به این حوزه ها مسلط تر شوم و اطلاعاتم را در وب به اشتراک بگذارم

دیدگاه کاربران

6 پاسخ به “معرفی احراز هویت Token در php”

  1. nariman گفت:

    بسیار جالب بود تشکر از زحمتتاتون

    0
  2. Aref گفت:

    سلام خیلی ممنون از مقاله های خوبتون
    ببخشید بنده یه سوال دارم.
    من برنامه نویسه اندروید هستم و دیگران به شدت توصیه میکنن که از احراز هویت Oauth استفاده کنم،‌در حالی که بنده اصلا اطلاعی از این که این روش چی هست، کاربردش تو اندروید چیه و چرا باید استفاده کنم نمیدونم؟
    و یه موردی هم که هست اینه که تا وقتی که من همون روش رایج همیشگی رو بلدم (همون روشی که توش به هر کاربر یه token اختصاص میدیم و وقتی لاگین کرد و اطلاعتش درست بود،‌ از اون به بعد تو درخواست ها از توکن استفاده میکنیم) چرا باید برم سراغ Ouath
    لطفا بندرو راهنمایی کنید
    ممنون

    0
    • حسن شفیعی گفت:

      سلام. خوشحالم که مفید واقع شده.
      تفاوت زیادی نداره . oauth هم همانند روشی که الان شما دارید استفاده می کنید یک توکن رو که بی معنی و فقط یک رشته منحصربه فرد هستش ایجاد می کنه (مجوز authorization ) و از آن به بعد برای احراز هویت و درخواست ها بهره می بره. (authentication)
      کاری که oauth انجام میده ینه که فقط به شما روش های مختلف دیگری برای ارتباط با سیستم های احراز هویت پیچیده میده و استفاده از oauth و یا همین ساختن توکن بر اساس روش خودتون زیاد تفاوتی ایجاد نمی کنه و از اون معمولا برای استاندارد شدن ارتباط بین وب سرویس و اپ استفاده میشه.

      ولی jwt هایی که اینجا معرفی کردیم کمی فراتر از توکن و oauth هستش چرا که توکنی که ایجاد کردیم یک رشته بی معنی نیستش بلکه یک سری عملیات cryptography و sign روش انجام شده و بعد از تجزیه رشته می توانیم اطلاعات را در فرمت استاندارد json هم بخونیم.

      موفق باشید.

      1+
  3. Aref گفت:

    خیلی ممنون
    پس میشه نتیجه گرفت که jwt یه روش برای بسته‌بندی اطلاعات انتقالی (شامل توکن، اطلاعات،‌ نوع رمزنگاری و امضا) هستش و امنیت بیشتری داره، که وابسته به نوع ارتباط ما اعم از توکن ساده یا Oauth نیست و میشه در هر دو ازش استفاده کرد.
    درسته ؟

    0

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دانلود رایگان (هدیه ویژه)

کتاب آموزش زبان برنامه نویسی PHP را دانلود و همین امروز یادگیری را شروع کن و به جمع برنامه نویسان ملحق شو ;)

دانلود رایگان کتاب

آموزش طراحی وب سایت

نظر کاربران عزیز

آموزش های آنلاین در چه زمینه ای تهیه کنیم ؟

  • آموزش جاوااسکریپت و جی کوئری (45%, 10)
  • آموزش ساخت ربات تلگرام (45%, 10)
  • آموزش بوت استرپ 4 (9%, 2)

تعداد رای ها : 22

Loading ... Loading ...

بخش کاربران

هنوز عضو نیستید ؟ کلیک کنید

مجوزهای ما


logo-samandehi نماد اعتماد الکترونیک

دانلود کتاب

عضویت در خبرنامه