PDA

View Full Version : احراز هویت بر اساس Token



samiasoft
سه شنبه 31 اردیبهشت 1398, 00:17 صبح
سلام و وقت بخیر

ایا در زمینه اعتبارسنجی با JWT (https://github.com/firebase/php-jwt)کار کردید ؟

فرض کنید سمت اپلکیشن کاربری میخواهد login شود..به همین خاطر اطلاعات کاربری وارد شده را بصورت post به سرور ارسال میکنم...سپس درصورت صحیح بودن اطلاعات کاربری در این دستور زیر ازش استفاده میکنم تا توکنی براساس اطلاعات کاربری در اون تایم بدست بیاورم :


$data = array("username" => 'ali', "userpassword" => '123456', "exp" => time() + 60);
$key = '1234567890';
$token = JWT::encode($data, $key);
در این مثال من مدت اعتبار توکن را 60 ثانیه درنظرگرفتم...که البته زمان خیلی کمی هست و با کلید فرضی 1234567890 توسط JWT رمزنگاری میشود.

توکنی که بدست میاورم را سمت اپلکیشن ذخیره میکنم و دفعه بعد درهردرخواست توکن را بصورت header سمت سرور ارسال میکنم و درصورت معتبر بودن درخواستی که کاربر داشته اجرا خواهد شد.

تا اینجا را که فکر میکنم پیاده سازی این روش را درست انجام داده باشم...حالا چند سوال در این زمینه داشتم :

- استاندارد مدت زمان اعتبار یک توکن چقدر هست ؟

- مساله دیگر اینکه وقتی توکن را ایجاد میکنم و اونو داخل سایت https://jwt.io/ درج میکنم به راحتی میبنم که اطلاعات از حالت رمزنگاری خارج میشوند (دیکد میشوند) !!
درسته پایین سایت کلید اولیه را ندادم و پیغام Invalid Signature نمایش داده شده اما درهرحال اگر کسی توکن رو بدست بیاره به راحتی اطلاعاتی که سمت JWT فرستاده شدند رو میتونه راحت ببینه.
به نظرتون این مساله رو نادیده بگیرم؟! یا بیام دوباره همون اطلاعاتی که بهش پاس داده میشه را رمزنگاری کنم؟! یا اینکه براساس اطلاعات کاربری توکن ایجاد نکنم ؟!

plague
سه شنبه 31 اردیبهشت 1398, 20:31 عصر
من خیلی وقته با این کار نکردم ولی معمولا یک کلید داره که تو سورس سایت شما ذخیرست و بدون اون کسی نمیتونه دیکد کنه
اگه کسی کلید رو بدست بیاره یعنی سایت رو هک کرده و شما همه اطلاعاتت از جمله دیتابیس دسته اونه پس نیاز نداره بره توکن رو دیکد کنه

البته شما داری یوزر و پسورد رو توش میزاری که کلا کار درستی نیست
وقتی کسی لاگین میکنه یه توکن تولید کن خودت و توی دیتبایس بریز و ربطش بده به کاربر لاگین شده بعد اون توکن رو بزار اینطو

زمان انقضا بسته به خودته ... هرچقد بیشتر باشه هکر زمان بیشتری داره که دیکدش کنه
میتونی از چند ساعت تا 1-2 روز بزاری