بررسی بخش 11.6.2 از RFC 9110: مجوزدهی در HTTP

http rfc 9110 http semantics authorization
20 آبان 1403

پروتکل HTTP به عنوان یکی از پایه‌های اصلی ارتباطات اینترنتی، نقش مهمی در نحوه ارسال درخواست‌ها و دریافت پاسخ‌ها دارد. یکی از مفاهیم کلیدی در این پروتکل، بخش مجوزدهی است که در قسمت 11.6.2 سند RFC 9110 به نام Authorization توضیح داده شده است. مجوزدهی یکی از مراحل مهم در امنیت داده‌هاست و بررسی درستی دسترسی کاربران به منابع خاص را فراهم می‌کند.

HTTP Authorization به ما اجازه می‌دهد که مطمئن شویم فقط کاربران مجاز می‌توانند به منابع حساس یا خصوصی دسترسی پیدا کنند. این مکانیزم معمولاً از طریق هدر Authorization انجام می‌شود که حاوی اطلاعات به‌خصوصی برای شناسایی کاربر یا درخواست است.

یکی از رایج‌ترین روش‌های استفاده شده در این بخش، Basic Authentication است. در این روش، اطلاعات کاربر (معمولاً نام کاربری و رمز عبور) با استفاده از Base64 انکد می‌شوند و به عنوان بخشی از هدر Authorization به سرور ارسال می‌شوند. البته این روش چندان امن نیست و اغلب با استفاده از HTTPS ایمن می‌شود.

روش‌های بیشتری برای مجوزدهی موجود است، از جمله Bearer token که در OAuth 2.0 استفاده می‌شود. این روش‌ها امنیت بیشتری را فراهم کرده و برای کاربردهای مدرن مناسب‌تر هستند. Bearer token به ما اجازه می‌دهد تا از توکن‌های زمان‌دار و امن برای احراز هویت استفاده کنیم.

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

مثال از نحوه استفاده از Authorization در HTTP


GET /resource HTTP/1.1\r\n
Host: example.com\r\n
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=\r\n

توضیح خط به خط کد

GET /resource HTTP/1.1
این خط، درخواست HTTP برای دریافت منبعی خاص از سرور را نمایش می‌دهد.

Host: example.com
اجباری است برای HTTP/1.1 و بیانگر دامین هدف درخواست است.

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
هدر Authorization با استفاده از Basic Authentication یک مقدار Base64 انکد شده از نام کاربری و رمز عبور ارسال می‌کند.

سوالات متداول

؟

چگونه از Basic Authentication در HTTP استفاده کنیم؟

؟

آیا Basic Authentication ایمن است؟

؟

چرا باید از Bearer token استفاده کنیم؟