مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

salman_b

عضویت از 1396/02/18

دلیل استفاده از JWT

  • چهارشنبه 20 تیر 1397
  • 09:08
تشکر میکنم

سلام

طبق گفته ی مهندس مدائنی بنده برای احراز هویت در سمت api به سراغ JWT رفتم

با توجه به اینکه JWT خود شمول هستش اغلب کاربردی در سیستم هایی که طراحی می کنیم نداره.

بنده هم نیاز دارم تا دسترسی کاربر رو محدود کنم یا بلاکش کنم و یا کارهایی که از JWT خود شمول بر نمی آید.

برای همین سورس کدی رو از گیت هاب گرفتم که توکن های صادر شده رو در دیتابیس سرور ذخیره میکنه و منقضی میکنه و یا نمیذاره کاربری با بیش از یک توکن لاگین کند و ... که برپایه ی OWIN کار میکنه

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

خب با این وجود دیگه چه فرقی بین احراز هویت با JWT با Identity هستش ؟!

خب Identity هم با سیستم خودش توکنی رو رمز نگاری میکنه و تو کوکی نگه میداره و به ازای اون یک session در سمت سرور ایجاد میکنه تا بتونه کاربر ها رو مدیریت کنه

سیستم بنده هم از دیتابیس میخونه و عملا میشه session ای که در دیتابیس مدیریت میشه و نه داخل رم که حتی کندتر هم هست! شما فکر کنین درخواست های همزمان هیچ کش شدنی اتفاق نمیفته و دائم داریم از دیتابیس توکن رو بررسی میکنیم که این خودش پدر سرور رو درمیاره!

لطفا راهنمایی کنید که کاری که کردم منطقی بود ؟ واقعا خود شمول بودنش دردسر میشه واسم چون نمیتونم کاربرا رو مدیریت کنم اگه هم بخوام یکی رو بلاک کنم باید secret رو تغییر بدم که اینطوری کل توکن ها نامعتبر میشن.

سوال بنده این هستش که در این صورت برتری JWT به سیستم احراز هویت Identity 2 چی هستش و چه چیزی امنیت این سیستم رو بیشتر میکنه ؟!

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 21 تیر 1397
  • 08:43

سلام

بحث برتری نیست دوست من بحث اینه که در web api نمیتونید از identity استفاده کنید

توضیح خیلی مفصل هست و به نظر مستندات web api و jwt را مطالعه کنید

کاربر سایت

psfco

عضویت از 1394/12/26

  • شنبه 25 آبان 1398
  • 12:35

سلام آقای مدائنی
من هم دقیقا به این مشکل بر خورد کردم و بسیار جستجو کردم:

پروژه سمت سرور: webapi dotnet core 2.2 سمت کلاینت angular 8 روش احراز هویت JWT با استفاده از کتابخانه Identity Bearer

مشکل اعلام شده توسط تست امنیت: توکن بعد از لاگ اوت هنوز معتبر است و سمت سرور disable نمیشود با وجودیکه از local storage کلاینت پاک شده است و میتواند توسط هکر مورد استفاده قرار گیرد.

راه حل شماره یک: هنگام لاگ اوت کاربر توکن او را تا فرارسیدن زمان expire در بلک لیست قرار داده و در هر درخواست توکن ارسالی چک شود که در بلک لیست نباشد. حالا این بلک لیست میتواند in memory یا در db ذخیره شود که سمت سرور بار زیادی دارد. رفرنس: https://piotrgankiewicz.com/2018/04/25/canceling-jwt-tokens-in-net-core/

راه حل شماره دو: استفاده از یک سرویس توکن برای رفرش توکن اصلی هنگام منقضی شدن و کاهش زمان expiretime به حداقل ممکن. مشکل این راه حل اولا فاصله زمانی است بین درخواست کلاینت با توکن منقضی شده و گرفتن توکن جدید که در این فاصله لاگ اوت هست! دوما حداقل زمان expire توکن jwt 5 دقیقه است که دوباره همان مشکل اولی برای 5 دقیقه وجود دارد. رفرنس:  https://fullstackmark.com/post/19/jwt-authentication-flow-with-refresh-tokens-in-aspnet-core-web-api
ا
ستاد لطفا راهنمایی کنید بنظر شما روش صحیح استفاده از توکن jwt بطوریکه تست امنیت هم پاس شود چیست؟؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)