کلیدهای API را با JWT تولید کنید و در صورت لزوم همان کلید را بازسازی کنید

من اخیراً احساس نیاز خودم را برای ایجاد یک API عمومی برای برنامه خود پیدا کردم. برنامه خود را با node.js و MongoDB توسعه دادم. پس از انجام تحقیقات ، تصمیم گرفتم از jwt برای تولید کلیدهای API برای کاربران و تأیید اعتبار استفاده کنم. برای تأیید اعتبار نشانه های jwt ، آنها به این مزیت احتیاج دارند که نیازی به ذخیره آنها در یک بانک اطلاعاتی ندارند ، زیرا بدون اطلاع از نشانه دقیق تولید شده می توانند رمزگشایی و تأیید شوند.

اما من می بینم که بسیاری از برنامه ها کلیدهای API خود را در داشبورد برنامه نشان داده و به کاربران نشان دهید ، بنابراین باید این نشانه را ذخیره کنم تا بعداً آنها را به کاربران نشان دهد. من می دانم که ذخیره کردن نشانه ها ایده بدی است و در صورت نقض بانک اطلاعاتی ، این امر می تواند هکرها را با کلیدهای API جعل هویت دیگران کند.

بنابراین داستان کوتاه طولانی من در تلاش هستم راهی پیدا کنم تا نشانه های دقیق را ذخیره نکنم. ، اما فقط بار خود را در دیتابیس ذخیره کنید و هر بار که کاربران کلیدهای API خود را درخواست می کنند ، من فقط یکی را با [SECRET SECRET تولید می کنم و آن را به آنها منتقل می کنم. در حال حاضر می فهمم که اگر در مرحله توافق نامه ، هر بار که می خواهم بار مشابهی را با همان iat (صادر شده در) صادر کنم ، متن تولید شده هر بار یکسان خواهد بود. بنابراین با ذخیره کردن iat با داده بارگذاری در دیتابیس می توانم هر بار توکن دقیق تولید کنم.


اکنون سوالات من این است:

  • آیا این رویکرد خوب است یا روش بهتری وجود دارد؟
  • آیا هیچ روش خوبی برای تولید کلیدهای API بدون ذخیره آنها وجود دارد؟
  • آیا این حتی لازم است (با توجه به اینکه آیا ساحل بانک اطلاعاتی وجود دارد ، همه داده ها از قبل دزدیده شده اند)؟
  • آیا روش دیگری غیر از استفاده از jwt برای رسیدن به این هدف وجود دارد؟

نحوه انجام احراز هویت با ZAP زمانی که API فقط نشانه را در بدن XML می پذیرد؟

در حال حاضر در آزمایش یک برنامه زاویه ای 6 با استفاده از OWASP ZAP کار می کنم. من واقعا از این ابزار لذت می برم، اما مانند بسیاری از ما، با بخش احراز هویت مبارزه می کنیم و بدون آن کل ابزار تبدیل به یک همبرگر می شود.

مسیر ورود در localhost در / login و نقطه پایان API من https://api.mytestproject.com/auth تنها XML خام را قبول می کند مانند:


   1.0 
  
     ...
    
       testuser 
       تست 
       blablabla 
    
     ...
  

در پاسخ من یک نشانه دریافت می کنم، اما API نیاز به فرستادن در بدن را به عنوان فیلمی از هر درخواست و نه به عنوان یک عنوان مجوز دارد

همچنین، اجرای عنکبوت نمی کند هر زمان برای ورود به صورت دستی مراجعه کنید و من نمیتوانم هیچ رشته ای برای گفتن اینکه آیا من به سیستم وارد شده یا از سیستم خارج شده ام را ارائه می دهم، زیرا برنامه زاویه ای من سرور نیست.

TLS – امن ترین روش برای ارسال اطلاعات احراز هویت به API چیست؟

از احراز هویت پایه استفاده نکنید، آن منسوخ شده است. هنگام استفاده از اعتبارنامه احراز هویت پایه به عنوان یک شناسه جلسه به کار می رود، بنابراین باید در هر درخواست ارسال شود. این دو حادثه بزرگ است:

  • مجوزهای ذخیره شده در حافظه پنهان مرورگر در متن ساده است که ممکن است در بعضی از سناریوها مورد سوء استفاده قرار گیرد.

  • جلسه را نمی توان متوقف کرد زیرا آن را به اعتبار کاربر متصل می کند و اعتبار هیچ مفهومی از منقضی شدن به عنوان JWT، کوکی ها و یا نوع دیگری از نشانه ها (توجه: هنگامی که می گوید منقضی شده من اشاره به رمز گشایی رمز عبور به عنوان در "نیاز به تغییر رمز عبور هر 3 ماه"، اما اعتبار به عنوان یک طرح اعتبار سنجی)

حتی اگر شما تلاش برای استفاده از احراز هویت اساسی سپس یک مرورگر کوکی را ارسال می کند که اعتبارنامه را در header مجوز حفظ خواهد کرد.

اگر شما از درخواست AJAX استفاده می کنید، توصیه من این است که با احراز هویت کوکی یا مهاجرت به JWT بمانم. توجه داشته باشید که اگر API از یک نام میزبان دیگر نامیده می شود (به عنوان مثال www.example.com یک api را در api.example.com فراخوانی می کند)، سرصفحه های مربوط به CORS برای اجازه دادن به اعتبار ها باید به درستی تنظیم شوند

خطرات ساخت یک API بدون احراز هویت؟

من قصد دارم یک API برای پروژه ام ایجاد کنم و فکر کنم در مورد احراز هویت. خطر ابتلا به هیچ گونه احراز هویت وجود ندارد؟

آیا کسی می تواند تمام مسیرهای ارسال / دریافت من را خالی کند؟ مثلا برخی از توابع API من عبارتند از: بازیابی جزئیات حساب های کاربری، ایجاد رزرو سرویس، بازیابی آن جزئیات رزرو، و غیره