راهنماها

احراز هویت چیست؟ ورود، نشست‌ها و OAuth توضیح داده می‌شود

احراز هویت راهی است که برنامه تأیید می‌کند کاربر کیست — معمولاً با بررسی چیزی که او می‌داند (گذرواژه)، چیزی که دارد (کدی که به تلفن یا ایمیلش فرستاده می‌شود) یا هویتی از یک سرویس معتبر دیگر (مثل «ورود با Google»). وقتی کاربر احراز هویت شد، برنامه او را با یک نشست یا توکن به خاطر می‌سپارد تا لازم نباشد در هر صفحه دوباره وارد شود. تعیین اینکه آن کاربر شناخته‌شده مجاز به چه کارهایی است، مرحله جداگانه‌ای است به نام مجوزدهی (authorization).

چرا وقتی با هوش مصنوعی می‌سازید مهم است

افزودن ورود یکی از رایج‌ترین درخواست‌هایی است که افراد از سازنده برنامه با هوش مصنوعی می‌کنند، و یکی از راحت‌ترین کارهایی که به‌طور ظریف اشتباه از آب درمی‌آید. صفحه ورود تولید کردنش ساده است. بخش سخت، همه چیزهای اطرافش است:

  • آیا گذرواژه‌ها به‌صورت امن ذخیره می‌شوند؟
  • آیا هر صفحه خصوصی و هر نقطه پایانی API واقعاً بررسی می‌کند چه کسی درخواست می‌دهد؟
  • آیا یک مشتری واردشده می‌تواند با تغییر یک عدد در آدرس، داده‌های مشتری دیگری را ببیند؟
  • وقتی کسی گذرواژه‌اش را فراموش می‌کند چه اتفاقی می‌افتد؟

یک برنامه می‌تواند کاملاً امن به‌نظر برسد و در همه این موارد شکست بخورد. فهمیدن اجزای متحرک به شما کمک می‌کند سؤال درست بپرسید و چیزهای درست را آزمایش کنید.

یک تشبیه روزمره

تصور کنید در یک هتل پذیرش می‌شوید.

در میز پذیرش شناسنامه یا کارت شناسایی‌تان را نشان می‌دهید. این احراز هویت است: اثبات اینکه کی هستید. سپس پذیرش یک کارت کلید به شما می‌دهد. این کارت نشست شماست: برای بقیه اقامت دیگر لازم نیست شناسنامه نشان دهید؛ فقط کارت را می‌زنید.

کارت در اتاق شما، باشگاه و آسانسور طبقه‌تان را باز می‌کند، اما اتاق مهمان‌های دیگر یا دفتر کارکنان را نه. این مجوزدهی است: اینکه هویت شما به چه چیزهایی دسترسی دارد. اگر کارت را گم کنید، هتل می‌تواند آن را از پذیرش غیرفعال کند (لغو نشست). وقتی تسویه می‌کنید، از کار می‌افتد (خروج از حساب، یا انقضا).

«ورود با Google» مثل این است که هتل به‌جای اینکه خودش شناسنامه‌تان را بررسی کند، نامه‌ای از یک شریک معتبر بپذیرد که بگوید «این فرد همین است».

روش‌های اصلی ورود

روشچطور کار می‌کندمزایامعایب
ایمیل + گذرواژهکاربر گذرواژه انتخاب می‌کند؛ برنامه هش آن را ذخیره می‌کندآشنا، بدون وابستگی بیرونیباید هش‌ها را امن ذخیره کنید و بازنشانی را مدیریت کنید
لینک جادویی / کد یک‌بارمصرفبرنامه لینک یا کدی به ایمیل می‌فرستد که کاربر را وارد می‌کندگذرواژه‌ای برای لو رفتن یا فراموش شدن نداردبه تحویل ایمیل وابسته است؛ ورود کندتر است
ورود با شبکه اجتماعی (OAuth / OpenID Connect)کاربر با Google، Apple، GitHub و غیره وارد می‌شودبرای کاربر سریع است؛ گذرواژه‌ای نزد شما ذخیره نمی‌شودتنظیم برای هر ارائه‌دهنده؛ کاربران بدون آن حساب‌ها
ارائه‌دهنده احراز هویت میزبانی‌شدهسرویسی مثل Clerk، Auth0 یا Supabase Auth ثبت‌نام، ورود و بازنشانی را انجام می‌دهدکار امنیتی کمتری برای شماهزینه ماهانه در مقیاس بزرگ؛ یک وابستگی دیگر
چندعاملی (MFA / 2FA)یک بررسی دوم پس از اولی، مثل کد برنامه احراز هویتنفوذ به آن بسیار سخت‌تر استکمی اصطکاک بیشتر

گذرواژه‌ها باید چطور ذخیره شوند

یک برنامه امن هرگز گذرواژه واقعی شما را ذخیره نمی‌کند. به‌جایش یک هش ذخیره می‌کند: خروجی یک تابع یک‌طرفه که گذرواژه را به یک رشته ثابت تبدیل می‌کند. وقتی وارد می‌شوید، برنامه آنچه تایپ کرده‌اید را هش می‌کند و نتیجه را با هش ذخیره‌شده مقایسه می‌کند.

دو جزئیات این کار را امن می‌کند:

  • نمک (salt) — یک مقدار تصادفی که قبل از هش‌کردن به هر گذرواژه اضافه می‌شود، تا دو نفر با گذرواژه یکسان، هش‌های متفاوت داشته باشند و جدول‌های جستجوی از پیش‌محاسبه‌شده بی‌فایده شوند.
  • یک الگوریتم کند که برای گذرواژه ساخته شده — مثل Argon2، bcrypt یا scrypt. هش‌های همه‌منظوره مثل MD5 یا SHA-256 به‌تنهایی بسیار سریع‌اند؛ مهاجمان می‌توانند میلیاردها حدس بزنند.

هش‌کردن همان رمزنگاری نیست. داده رمزنگاری‌شده را می‌شود با کلید رمزگشایی کرد؛ هش گذرواژه طوری طراحی شده که اصلاً قابل برگشت نباشد.

نشست در برابر توکن

بعد از ورود، برنامه باید در هر درخواست شما را بشناسد. دو روش رایج وجود دارد.

نشست (کوکی)توکن (مثلاً JWT)
آنچه مرورگر نگه می‌داردیک شناسه تصادفی نشست در کوکیتوکن امضاشده‌ای که اطلاعات کاربر و زمان انقضا را دارد
جایی که وضعیت ورود ذخیره می‌شودروی سرور، در پایگاه داده یا یک انبارداخل خود توکن
خروج کسی از همه جاآسان: حذف نشست روی سرورسخت‌تر: توکن تا انقضا معتبر می‌ماند، مگر اینکه فهرست مسدودی نگه دارید
کاربرد معمولبرنامه‌های وب سنتیAPI ها، برنامه‌های موبایل، سرویس‌هایی که با هم حرف می‌زنند

برای کوکی‌ها سه تنظیم مهم است: HttpOnly (جاوااسکریپت صفحه نمی‌تواند کوکی را بخواند)، Secure (فقط روی HTTPS فرستاده می‌شود) و SameSite (ارسال آن را در درخواست‌هایی از سایت‌های دیگر محدود می‌کند). ذخیره توکن در localStorage مرورگر رایج است، اما آن را در معرض هر اسکریپتی قرار می‌دهد که در صفحه اجرا شود.

OAuth و «ورود با Google»

OAuth 2.0 استانداردی برای مجوز تفویضی است: به یک برنامه اجازه می‌دهد دسترسی محدودی به حساب شما در سرویس دیگری داشته باشد — مثلاً خواندن تقویم Google شما — بدون اینکه هرگز گذرواژه Google شما را ببیند. به Google هدایت می‌شوید، مجوزهای مشخصی را تأیید می‌کنید (به آن‌ها scope گفته می‌شود)، و Google به برنامه توکنی فقط برای همان مجوزها می‌دهد.

OAuth به‌تنهایی برای دادن دسترسی طراحی شده بود، نه برای گفتن اینکه شما کی هستید. OpenID Connect (OIDC) لایه‌ای روی OAuth 2.0 است که هویت را اضافه می‌کند؛ همان چیزی که «ورود با Google» یا «ورود با Apple» از آن استفاده می‌کند. برای راه‌اندازی، برنامه‌تان را نزد ارائه‌دهنده ثبت می‌کنید و یک client ID و یک client secret می‌گیرید؛ راز روی سرور شما می‌ماند.

یک مثال کامل: ورود به یک پورتال مشتری

فرض کنید پورتالی می‌سازید که در آن مشتری‌های یک آژانس طراحی پروژه‌ها و فاکتورهایشان را می‌بینند.

  • احراز هویت: مشتری‌ها با ایمیل و لینک جادویی وارد می‌شوند، پس گذرواژه‌ای برای مدیریت وجود ندارد. کارکنان آژانس با حساب‌های Google Workspace وارد می‌شوند.
  • نقش‌ها: هر کاربر یک نقش دارد — client یا staff.
  • قواعد مجوزدهی:
عملمشتریکارمند
دیدن پروژه‌های شرکت خودشبلهبله
دیدن پروژه‌های شرکت‌های دیگرخیربله
آپلود فایل در یک پروژهفقط پروژه‌های خودشبله
علامت‌زدن فاکتور به‌عنوان پرداخت‌شدهخیربله
  • جایی که اعمال می‌شود: روی سرور، برای هر درخواست. سرور کاربر واردشده را پیدا می‌کند و فقط پروژه‌هایی را برمی‌گرداند که project.company_id آن‌ها با شرکت کاربر یکی باشد. پنهان‌کردن دکمه «علامت‌زدن به‌عنوان پرداخت‌شده» کافی نیست — خود نقطه پایانی باید درخواست را رد کند.

توضیح واژه‌های رایج

واژهمعنی
احراز هویت (AuthN)تأیید اینکه کسی کیست.
مجوزدهی (AuthZ)تعیین اینکه مجاز به چه کارهایی است.
نشست (Session)یادآوری برنامه از اینکه بین درخواست‌ها وارد شده‌اید.
کوکی (Cookie)قطعه کوچکی از داده که مرورگر با هر درخواست به سایت برمی‌گرداند.
JWTJSON Web Token: توکنی امضاشده و فشرده که ادعاهایی مثل شناسه کاربر و انقضا را حمل می‌کند.
نقش / مجوز (Role / permission)برچسب‌هایی مثل admin یا member که دسترسی را تعیین می‌کنند.
MFA / 2FAالزام به یک اثبات دوم، مثل کد برنامه احراز هویت.
SSOورود یکپارچه: یک ورود (اغلب با حساب شرکتی) برای برنامه‌های زیاد.
401 در برابر 403«شما کی هستید؟» (احراز هویت نشده) در برابر «نمی‌توانید این کار را بکنید» (مجوز ندارید).

اشتباهات و برداشت‌های غلط رایج

  • بررسی دسترسی‌ها فقط در صفحه. اگر مرورگر یک دکمه را پنهان کند اما API بررسی نکند، هر کسی می‌تواند مستقیم API را صدا بزند.
  • اعتماد به شناسه‌های داخل آدرس. /invoices/1042 باید بررسی کند که فاکتور ۱۰۴۲ متعلق به کاربر واردشده است.
  • ساختن رمزنگاری شخصی. از کتابخانه‌ها یا ارائه‌دهندگان شناخته‌شده استفاده کنید؛ اجازه ندهید هوش مصنوعی یک طرح هش‌کردن از خودش بسازد.
  • بازنشانی ضعیف گذرواژه. لینک‌های بازنشانی باید یک‌بارمصرف باشند، سریع منقضی شوند و نشان ندهند که آیا ایمیلی حساب دارد یا نه.
  • قاطی‌کردن ورود خودتان با ورود سازنده‌تان. کاربران برنامه شما جدا از حساب شما در ابزاری هستند که با آن می‌سازید.
  • نبود محدودیت نرخ برای ورود. بدون آن، مهاجمان می‌توانند بی‌پایان گذرواژه امتحان کنند.

از سازنده هوش مصنوعی خود چه بخواهید

  • «ثبت‌نام و ورود را با [یک کتابخانه یا ارائه‌دهنده شناخته‌شده] اضافه کن. هش‌کردن گذرواژه سفارشی ننویس.»
  • «گذرواژه‌ها را با bcrypt یا Argon2 هش‌شده ذخیره کن.»
  • «برای نشست از کوکی‌های HttpOnly و Secure استفاده کن.»
  • «نقش‌ها را اضافه کن: admin و member. هر نقطه پایانی و اینکه کدام نقش‌ها می‌توانند آن را صدا بزنند را فهرست کن.»
  • «روی سرور اعمال کن که کاربران فقط بتوانند رکوردهای خودشان را بخوانند و ویرایش کنند. سپس نشان بده چطور بررسی کردی.»
  • «بازنشانی گذرواژه با لینک‌های یک‌بارمصرف که در یک ساعت منقضی می‌شوند اضافه کن.»
  • «تلاش‌های ورود را محدود کن (rate limit).»

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

احراز هویت در Mythex

Mythex یک محصول احراز هویت داخلی برای کاربران برنامه شما ارائه نمی‌دهد؛ شما یک روش را انتخاب می‌کنید — ایمیل و گذرواژه ذخیره‌شده در پایگاه داده پروژه، یا SDK یک ارائه‌دهنده میزبانی‌شده — و از عامل می‌خواهید آن را اضافه کند. کلیدهای ارائه‌دهنده در رازهای پروژه قرار می‌گیرند، نه در گفت‌وگو. این موضوع جدا از روشی است که با آن خودِ Mythex را وارد می‌شوید. دستور آماده در بخش افزودن ورود به برنامه مستندات، یک پرامپت شروع دارد که می‌توانید تطبیقش دهید، و API چیست توضیح می‌دهد که این بررسی‌های سمت سرور کجا قرار دارند.

پرسش‌ها

تفاوت احراز هویت (authentication) و مجوزدهی (authorization) چیست؟

احراز هویت بررسی می‌کند شما کی هستید، مثلاً با تأیید گذرواژه‌تان. مجوزدهی تصمیم می‌گیرد پس از شناخته‌شدن، مجاز به انجام چه کارهایی هستید، مثلاً اینکه آیا می‌توانید صفحه مدیریت را ببینید یا رزرو شخص دیگری را ویرایش کنید. برنامه‌ها به هر دو نیاز دارند.

OAuth چیست؟

OAuth 2.0 یک استاندارد است که به یک برنامه اجازه می‌دهد دسترسی محدودی به حساب شما در سرویس دیگری داشته باشد، بدون اینکه گذرواژه شما را ببیند. «ورود با Google» از OpenID Connect استفاده می‌کند، یک لایه هویت که روی OAuth 2.0 ساخته شده، بنابراین برنامه از Google می‌فهمد شما کی هستید.

آیا برنامه من باید گذرواژه‌ها را ذخیره کند؟

هرگز به شکل قابل‌خواندن. اگر ورود با ایمیل و گذرواژه دارید، گذرواژه‌ها باید به‌صورت هش نمکی (salted hash) ذخیره شوند که با یک الگوریتم کند و مخصوص گذرواژه ساخته شده باشد، مثل Argon2 یا bcrypt. بسیاری از برنامه‌ها با استفاده از یک سرویس احراز هویت میزبانی‌شده، ورود با شبکه‌های اجتماعی یا لینک‌های جادویی ایمیلی از این مسئله دوری می‌کنند.

برنامه من باید از نشست یا توکن استفاده کند؟

هر دو کار می‌کنند. نشست وضعیت ورود را روی سرور ذخیره می‌کند و یک شناسه تصادفی در کوکی به مرورگر می‌دهد که لغو کردنش آسان است. توکنی مثل JWT خودش اطلاعات امضاشده را حمل می‌کند؛ این برای API ها و کلاینت‌های موبایل مناسب است، اما پیش از انقضا لغوش سخت‌تر است. برای یک برنامه وب معمولی، نشست مبتنی بر کوکی انتخاب مطمئنی است.

Mythex · Pricing · با هوش مصنوعی هر چیزی بسازید · قالب‌های وب‌سایت و اپلیکیشن · مقایسه‌ی Mythex · واژه‌نامه‌ی ساخت اپلیکیشن با هوش مصنوعی · ابزارهای رایگان ساخت اپلیکیشن با هوش مصنوعی · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)