اخیراً به این فکر کردهام که چگونه برخی از نقاط پایانی مهم خود را هنگام استفاده از JWT ذخیرهشده محلی امنتر کنم.
ممکن است این بهترین روش برای امنیت نباشد (به دلیل احتمال حملات XSS)، اما این یک الزام بود که توسط من تعیین نشده بود. مجبور شدم تطبیق پیدا کنم.
بنابراین برای ایمنتر کردن این موضوع، راهحلی پیدا کردهام، که امیدوارم به شما نیز کمک کند.
مشکل
من فرض میکنم که همه ما میدانیم JWT چیست – توکنی که توسط سرویس پشتیبان صادر میشود، که توسط frontend قابل تغییر نیست، زیرا این امر امضا را تغییر میدهد و به طور خودکار توکن را باطل میکند.
این عالی به نظر می رسد، تا زمانی که با موقعیتی مواجه شویم که ممکن است توکن به سرقت برود – مانند مورد من با حمله XSS. بسیاری از وب سایت ها به جای کوکی فقط HTTP، توکن ها را در حافظه محلی ذخیره می کنند، بنابراین آنها نیز آسیب پذیر هستند.
راه حل
بنابراین، هنگامی که امکان تغییر روش ذخیره سازی آن توکن وجود ندارد، باید نحوه صدور و اعتبارسنجی توکن را تغییر دهیم، و این لحظه ای است که می خواهم یک راه حل ساده را به شما معرفی کنم – JWT با اثر انگشت هش شده، اما بیایید کد را ببینیم
بیایید فرض کنیم که ما یک نقطه پایانی برای صدور توکن داریم، اجازه دهید آن را نقطه پایانی ورود به سیستم بنامیم
@Controller('v1/sign-in')
export class SignInAction {
constructor(private jwtService: JwtService) {}
@Post()
async handle(
@Req()...