درک جریان های احراز هویت وب مدرن: جلسه در مقابل JWT در مقابل OAuth
Summarize this content to 400 words in Persian Lang
فهرست مطالب
مقدمه
جریان احراز هویت مبتنی بر جلسه
جریان احراز هویت JWT
جریان احراز هویت OAuth 2.0
نتیجه گیری
مقدمه
احراز هویت فرآیند تأیید هویت کاربر برای دسترسی به خدمات درون برنامه است.
این مقاله به بررسی سه روش احراز هویت محبوب میپردازد: احراز هویت مبتنی بر جلسه، توکنهای وب JSON (JWT) و OAuth 2.0.
جریان احراز هویت مبتنی بر جلسه
احراز هویت جلسه روشی برای شناسایی کاربران در درخواست های بعدی پس از یک بار ورود به سیستم است. به طور معمول، احراز هویت جلسه شامل مراحل زیر است:
کاربر وارد می شود: مرورگر اعتبار ورود (ID/رمز عبور) را به سرور ارسال می کند.
اعتبار سنجی سرور و ایجاد جلسه: سرور اعتبارنامه ها را تأیید می کند و یک جلسه ایجاد می کند و آن را هم در سمت سرور و هم در یک کوکی مرورگر ذخیره می کند.
پاسخ سرور: سرور تأیید برقراری موفقیت آمیز جلسه را به مرورگر ارسال می کند.
درخواست های تایید شده: مرورگر شامل اطلاعات جلسه در درخواست های بعدی برای دسترسی به منابع محافظت شده است.
تایید جلسه: سرور اطلاعات جلسه را تأیید می کند و دسترسی را مجاز می کند.
پاسخ محافظت شده: سرور پس از مجوز موفقیت آمیز با منابع درخواستی پاسخ می دهد.
شروع خروج: کاربر خروج از سیستم را آغاز می کند، مرورگر درخواست خروج را به سرور ارسال می کند.
ختم جلسه: سرور با حذف آن از فضای ذخیره سازی و پاک کردن کوکی، جلسه را باطل می کند.
اتمام خروج: سرور خروج موفقیت آمیز از مرورگر را تایید می کند.
Browser Server
| |
|— 1. Login ——> |
| (ID and Password) |
| | 2. Establish Session (Stored on server and Cookie)
| |
|<– 3. Response —– |
| |
| |
|— 4. Request ——> |
| (Includes Session Info)| 5. Authorization Successful
| |
|<– 6. Response —– |
| (User Identified) |
| |
|— 7. Logout ——> |
| | 8. Delete Session
|<– 9. Response — |
| (Session Info Cleared)|
| |
جریان احراز هویت JWT
احراز هویت JWT (JSON Web Token) روشی است که کاربران را با استفاده از یک توکن خاص وارد سیستم میکند. هنگامی که یک کاربر وارد سیستم می شود، سرور یک نشانه امضا شده حاوی اطلاعات کاربر ایجاد می کند. سپس مرورگر این نشانه را با هر درخواستی شامل میشود و به سرور اجازه میدهد بدون نیاز به ذخیره دادههای جلسه، تأیید کند که کاربر چه کسی است. به طور معمول، احراز هویت JWT شامل مراحل زیر است:
کاربر وارد می شود: مرورگر اعتبار ورود (ID/رمز عبور) را به سرور ارسال می کند.
اعتبار سنجی سرور و ایجاد توکن: سرور اعتبارنامه ها را تأیید می کند و یک توکن JWT حاوی اطلاعات کاربر ایجاد می کند که با یک کلید مخفی امضا شده است.
پاسخ سرور: سرور رمز JWT را به مرورگر برمی گرداند. رمز را می توان در موارد زیر ذخیره کرد:
localStorage: به راحتی در دسترس است اما در برابر حملات XSS آسیب پذیر است
sessionStorage: شبیه به localStorage است اما با بسته شدن مرورگر پاک می شود
حافظه: ایمن ترین گزینه اما در بازخوانی صفحه گم شده است
httpOnly Cookie: ایمن در برابر XSS اما در برابر CSRF آسیب پذیر است
درخواست های تایید شده: مرورگر برای درخواستهای بعدی برای دسترسی به منابع محافظتشده، توکن JWT را در سربرگ مجوز قرار میدهد.
تایید رمز: سرور امضای JWT را تأیید می کند و بررسی می کند که آیا توکن منقضی نشده است.
پاسخ محافظت شده: سرور پس از تایید موفقیت آمیز توکن با منابع درخواستی پاسخ می دهد.
رسیدگی به انقضای توکن: اگر توکن منقضی شود، سرور خطای 401 را برمیگرداند و مرورگر باید توکن جدیدی درخواست کند.
نوسازی رمز: مرورگر برای دریافت یک توکن جدید JWT (اگر مکانیسم تازه سازی اجرا شده باشد)، توکن رفرش ارسال می کند.
تمدید توکن: سرور توکن رفرش را تایید می کند و یک توکن JWT جدید صادر می کند.
Browser Server
| |
|— 1. Login ——> |
| (ID and Password) |
| | 2. Create JWT Token (Signed with Secret Key)
| |
|<– 3. Response —– |
| (Return JWT Token) |
| |
|— 4. Request ——> |
| (JWT in Header) | 5. Verify JWT Signature
| |
|<– 6. Response —– |
| (Protected Data) |
| |
|— 7. Request ——> |
| (Expired JWT) | Token Expired
| |
|<– Error 401 —- |
| |
|— 8. Get New JWT –> |
| (Refresh Token) | 9. Verify & Generate New JWT
| |
|<– Response —- |
| (New JWT Token) |
| |
جریان احراز هویت OAuth 2.0
احراز هویت OAuth راهی است که به کاربران اجازه میدهد با استفاده از حسابهای خود از سرویسهای دیگر (مانند Google یا فیسبوک) به برنامه شما وارد شوند. به جای ایجاد نام کاربری و رمز عبور جدید، کاربران می توانند از حساب هایی که از قبل دارند استفاده کنند. زمانی که کاربر «ورود با Google» را انتخاب میکند، به صفحه ورود به سیستم Google ارسال میشود و پس از تأیید، Google به برنامه شما میگوید که کاربر تأیید شده است. به طور معمول، احراز هویت OAuth شامل مراحل زیر است:
کاربر شروع به ورود می کند: کاربر روی “ورود با ارائه دهنده” (Google، Facebook و غیره) در مرورگر کلیک می کند.
درخواست مجوز: برنامه کاربر را به صفحه ورود ارائه دهنده هدایت می کند با:
client_id: شناسه منحصر به فرد برنامه
redirect_uri: پس از ورود به کجا برگردیم
محدوده: مجوزهای درخواست شده
state: رمز امنیتی برای جلوگیری از CSRF
احراز هویت کاربر: کاربر در سایت ارائه دهنده وارد می شود و مجوزهای درخواستی را تأیید می کند.
بازگشت کد: ارائه دهنده به برنامه با استفاده از:
کد مجوز: کد موقت
state: همان رمز امنیتی برای تأیید
تبادل توکن: سرور برنامه به ارائه دهنده ارسال می کند:
کد مجوز
client_id و client_secret
redirect_uri
دسترسی به پاسخ نشانه: ارائه دهنده برمی گرداند:
نشانه دسترسی: برای دسترسی به API
Refresh Token: برای دریافت نشانه های دسترسی جدید
زمان انقضا: دوره اعتبار رمز
id_token (اختیاری): اطلاعات کاربر
دسترسی به منابع: برنامه اکنون می تواند:
برای دریافت داده های کاربر از ارائه دهنده، از رمز دسترسی استفاده کنید
ایجاد جلسه کاربر محلی
ذخیره رمز تازه سازی ایمن (در پایگاه داده)
رسیدگی به انقضای توکن: زمانی که نشانه دسترسی منقضی می شود:
برنامه از نشانه رفرش برای درخواست نشانه دسترسی جدید استفاده می کند
ارائهدهنده توکن تازهسازی را تأیید میکند
ارائه دهنده رمز دسترسی جدید صادر می کند
فرآیند خروج: خروج کاربر شامل:
پاک کردن جلسه محلی
ابطال نشانه ها در ارائه دهنده (اختیاری)
تغییر مسیر به نقطه پایان خروج ارائه دهنده (اختیاری)
Browser App Server OAuth Provider
| | |
|– 1. Click Login –> | |
| (Login with Provider) | |
| | |
|<- 2. Redirect ——— | |
| (client_id, | |
| redirect_uri, | |
| scope, | |
| state) | |
| | |
|——————————–> 3. Login & Approve |
| | (User authenticates |
| | & approves scope) |
| | |
|<——————————– 4. Redirect |
| | (authorization code, |
| | state) |
| | |
|– 5. Send Code ——> | |
| |– 5. Token Exchange –> |
| | (authorization code, |
| | client_id, |
| | client_secret, |
| | redirect_uri) |
| | |
| |<- 6. Tokens ———- |
| | (access token, |
| | refresh token, |
| | expiration time, |
| | id_token) |
| | |
|<- 7. Create Session — | |
| (Store tokens & | |
| create user session) | |
| | |
|– 8. Request with —- | |
| Expired Token | |
| |– 8. Refresh Token –> |
| | (refresh token) |
| | |
| |<- 8. New Token —— |
| | (new access token) |
| | |
|– 9. Logout ———> | |
| |– 9. Revoke Tokens –> |
| | (optional) |
|<- 9. Clear Session — | |
| (& optional redirect | |
| to provider logout) | |
نتیجه گیری
روش احراز هویت خود را بر اساس نیاز خود انتخاب کنید:
احراز هویت جلسه
بهترین برای: وب سایت های سنتی
آسان برای استفاده
روی سرور تک کار می کند
احراز هویت JWT
بهترین برای: برنامه های وب مدرن و API ها
بدون نیاز به ذخیره سازی سرور
در چندین سرور کار می کند
احراز هویت OAuth
بهترین برای: ویژگی های “ورود با Google/Facebook”.
کاربران می توانند از حساب های موجود استفاده کنند
برای ورود به شبکه اجتماعی خوب است
فهرست مطالب
- مقدمه
- جریان احراز هویت مبتنی بر جلسه
- جریان احراز هویت JWT
- جریان احراز هویت OAuth 2.0
- نتیجه گیری
مقدمه
احراز هویت فرآیند تأیید هویت کاربر برای دسترسی به خدمات درون برنامه است.
این مقاله به بررسی سه روش احراز هویت محبوب میپردازد: احراز هویت مبتنی بر جلسه، توکنهای وب JSON (JWT) و OAuth 2.0.
جریان احراز هویت مبتنی بر جلسه
احراز هویت جلسه روشی برای شناسایی کاربران در درخواست های بعدی پس از یک بار ورود به سیستم است. به طور معمول، احراز هویت جلسه شامل مراحل زیر است:
- کاربر وارد می شود: مرورگر اعتبار ورود (ID/رمز عبور) را به سرور ارسال می کند.
- اعتبار سنجی سرور و ایجاد جلسه: سرور اعتبارنامه ها را تأیید می کند و یک جلسه ایجاد می کند و آن را هم در سمت سرور و هم در یک کوکی مرورگر ذخیره می کند.
- پاسخ سرور: سرور تأیید برقراری موفقیت آمیز جلسه را به مرورگر ارسال می کند.
- درخواست های تایید شده: مرورگر شامل اطلاعات جلسه در درخواست های بعدی برای دسترسی به منابع محافظت شده است.
- تایید جلسه: سرور اطلاعات جلسه را تأیید می کند و دسترسی را مجاز می کند.
- پاسخ محافظت شده: سرور پس از مجوز موفقیت آمیز با منابع درخواستی پاسخ می دهد.
- شروع خروج: کاربر خروج از سیستم را آغاز می کند، مرورگر درخواست خروج را به سرور ارسال می کند.
- ختم جلسه: سرور با حذف آن از فضای ذخیره سازی و پاک کردن کوکی، جلسه را باطل می کند.
- اتمام خروج: سرور خروج موفقیت آمیز از مرورگر را تایید می کند.
Browser Server
| |
|--- 1. Login ------> |
| (ID and Password) |
| | 2. Establish Session (Stored on server and Cookie)
| |
|<-- 3. Response ----- |
| |
| |
|--- 4. Request ------> |
| (Includes Session Info)| 5. Authorization Successful
| |
|<-- 6. Response ----- |
| (User Identified) |
| |
|--- 7. Logout ------> |
| | 8. Delete Session
|<-- 9. Response --- |
| (Session Info Cleared)|
| |
جریان احراز هویت JWT
احراز هویت JWT (JSON Web Token) روشی است که کاربران را با استفاده از یک توکن خاص وارد سیستم میکند. هنگامی که یک کاربر وارد سیستم می شود، سرور یک نشانه امضا شده حاوی اطلاعات کاربر ایجاد می کند. سپس مرورگر این نشانه را با هر درخواستی شامل میشود و به سرور اجازه میدهد بدون نیاز به ذخیره دادههای جلسه، تأیید کند که کاربر چه کسی است. به طور معمول، احراز هویت JWT شامل مراحل زیر است:
- کاربر وارد می شود: مرورگر اعتبار ورود (ID/رمز عبور) را به سرور ارسال می کند.
- اعتبار سنجی سرور و ایجاد توکن: سرور اعتبارنامه ها را تأیید می کند و یک توکن JWT حاوی اطلاعات کاربر ایجاد می کند که با یک کلید مخفی امضا شده است.
-
پاسخ سرور: سرور رمز JWT را به مرورگر برمی گرداند. رمز را می توان در موارد زیر ذخیره کرد:
- localStorage: به راحتی در دسترس است اما در برابر حملات XSS آسیب پذیر است
- sessionStorage: شبیه به localStorage است اما با بسته شدن مرورگر پاک می شود
- حافظه: ایمن ترین گزینه اما در بازخوانی صفحه گم شده است
- httpOnly Cookie: ایمن در برابر XSS اما در برابر CSRF آسیب پذیر است
- درخواست های تایید شده: مرورگر برای درخواستهای بعدی برای دسترسی به منابع محافظتشده، توکن JWT را در سربرگ مجوز قرار میدهد.
- تایید رمز: سرور امضای JWT را تأیید می کند و بررسی می کند که آیا توکن منقضی نشده است.
- پاسخ محافظت شده: سرور پس از تایید موفقیت آمیز توکن با منابع درخواستی پاسخ می دهد.
- رسیدگی به انقضای توکن: اگر توکن منقضی شود، سرور خطای 401 را برمیگرداند و مرورگر باید توکن جدیدی درخواست کند.
- نوسازی رمز: مرورگر برای دریافت یک توکن جدید JWT (اگر مکانیسم تازه سازی اجرا شده باشد)، توکن رفرش ارسال می کند.
- تمدید توکن: سرور توکن رفرش را تایید می کند و یک توکن JWT جدید صادر می کند.
Browser Server
| |
|--- 1. Login ------> |
| (ID and Password) |
| | 2. Create JWT Token (Signed with Secret Key)
| |
|<-- 3. Response ----- |
| (Return JWT Token) |
| |
|--- 4. Request ------> |
| (JWT in Header) | 5. Verify JWT Signature
| |
|<-- 6. Response ----- |
| (Protected Data) |
| |
|--- 7. Request ------> |
| (Expired JWT) | Token Expired
| |
|<-- Error 401 ---- |
| |
|--- 8. Get New JWT --> |
| (Refresh Token) | 9. Verify & Generate New JWT
| |
|<-- Response ---- |
| (New JWT Token) |
| |
جریان احراز هویت OAuth 2.0
احراز هویت OAuth راهی است که به کاربران اجازه میدهد با استفاده از حسابهای خود از سرویسهای دیگر (مانند Google یا فیسبوک) به برنامه شما وارد شوند. به جای ایجاد نام کاربری و رمز عبور جدید، کاربران می توانند از حساب هایی که از قبل دارند استفاده کنند. زمانی که کاربر «ورود با Google» را انتخاب میکند، به صفحه ورود به سیستم Google ارسال میشود و پس از تأیید، Google به برنامه شما میگوید که کاربر تأیید شده است. به طور معمول، احراز هویت OAuth شامل مراحل زیر است:
- کاربر شروع به ورود می کند: کاربر روی “ورود با ارائه دهنده” (Google، Facebook و غیره) در مرورگر کلیک می کند.
-
درخواست مجوز: برنامه کاربر را به صفحه ورود ارائه دهنده هدایت می کند با:
- client_id: شناسه منحصر به فرد برنامه
- redirect_uri: پس از ورود به کجا برگردیم
- محدوده: مجوزهای درخواست شده
- state: رمز امنیتی برای جلوگیری از CSRF
- احراز هویت کاربر: کاربر در سایت ارائه دهنده وارد می شود و مجوزهای درخواستی را تأیید می کند.
-
بازگشت کد: ارائه دهنده به برنامه با استفاده از:
- کد مجوز: کد موقت
- state: همان رمز امنیتی برای تأیید
-
تبادل توکن: سرور برنامه به ارائه دهنده ارسال می کند:
- کد مجوز
- client_id و client_secret
- redirect_uri
-
دسترسی به پاسخ نشانه: ارائه دهنده برمی گرداند:
- نشانه دسترسی: برای دسترسی به API
- Refresh Token: برای دریافت نشانه های دسترسی جدید
- زمان انقضا: دوره اعتبار رمز
- id_token (اختیاری): اطلاعات کاربر
-
دسترسی به منابع: برنامه اکنون می تواند:
- برای دریافت داده های کاربر از ارائه دهنده، از رمز دسترسی استفاده کنید
- ایجاد جلسه کاربر محلی
- ذخیره رمز تازه سازی ایمن (در پایگاه داده)
-
رسیدگی به انقضای توکن: زمانی که نشانه دسترسی منقضی می شود:
- برنامه از نشانه رفرش برای درخواست نشانه دسترسی جدید استفاده می کند
- ارائهدهنده توکن تازهسازی را تأیید میکند
- ارائه دهنده رمز دسترسی جدید صادر می کند
-
فرآیند خروج: خروج کاربر شامل:
- پاک کردن جلسه محلی
- ابطال نشانه ها در ارائه دهنده (اختیاری)
- تغییر مسیر به نقطه پایان خروج ارائه دهنده (اختیاری)
Browser App Server OAuth Provider
| | |
|-- 1. Click Login --> | |
| (Login with Provider) | |
| | |
|<- 2. Redirect --------- | |
| (client_id, | |
| redirect_uri, | |
| scope, | |
| state) | |
| | |
|--------------------------------> 3. Login & Approve |
| | (User authenticates |
| | & approves scope) |
| | |
|<-------------------------------- 4. Redirect |
| | (authorization code, |
| | state) |
| | |
|-- 5. Send Code ------> | |
| |-- 5. Token Exchange --> |
| | (authorization code, |
| | client_id, |
| | client_secret, |
| | redirect_uri) |
| | |
| |<- 6. Tokens ---------- |
| | (access token, |
| | refresh token, |
| | expiration time, |
| | id_token) |
| | |
|<- 7. Create Session -- | |
| (Store tokens & | |
| create user session) | |
| | |
|-- 8. Request with ---- | |
| Expired Token | |
| |-- 8. Refresh Token --> |
| | (refresh token) |
| | |
| |<- 8. New Token ------ |
| | (new access token) |
| | |
|-- 9. Logout ---------> | |
| |-- 9. Revoke Tokens --> |
| | (optional) |
|<- 9. Clear Session --- | |
| (& optional redirect | |
| to provider logout) | |
نتیجه گیری
روش احراز هویت خود را بر اساس نیاز خود انتخاب کنید:
احراز هویت جلسه
- بهترین برای: وب سایت های سنتی
- آسان برای استفاده
- روی سرور تک کار می کند
احراز هویت JWT
- بهترین برای: برنامه های وب مدرن و API ها
- بدون نیاز به ذخیره سازی سرور
- در چندین سرور کار می کند
احراز هویت OAuth
- بهترین برای: ویژگی های “ورود با Google/Facebook”.
- کاربران می توانند از حساب های موجود استفاده کنند
- برای ورود به شبکه اجتماعی خوب است