Authentication یعنی فرایند احراز هویت؛ یعنی سیستم بررسی میکند درخواست واقعاً از چه کاربر، سیستم یا کلاینتی آمده است.
در تست API، Authentication مشخص میکند آیا درخواست اجازه ورود به API را دارد یا نه. این احراز هویت معمولاً از طریق Header، Token، API Key یا مکانیزمهای استاندارد مثل OAuth 2.0 انجام میشود.
نکته مهم:
Authentication با Authorization فرق دارد.
Authentication = «تو کی هستی؟»
Authorization = «با این هویت، به چه چیزی دسترسی داری؟»
مثلاً اگر کاربر با Token معتبر وارد شود، بخش Authentication موفق شده؛ اما اینکه اجازه ویرایش حساب مشتری دیگر را داشته باشد یا نه، مربوط به Authorization است.
چون در تست API، فقط بررسی Body و Status Code کافی نیست. خیلی از Failureهای مهم در سیستمهای بانکی و Backend اصلاً از جنس امنیت، توکن، سطح دسترسی، انقضای نشست یا ضعف در احراز هویت هستند.
تستر باید بتواند تشخیص دهد:
درخواست بدون احراز هویت باید چه خطایی بدهد
توکن منقضی چه رفتاری باید داشته باشد
API Key یا Bearer Token کجا ارسال میشود
فرق 401 و 403 چیست
Access Token و Refresh Token چه نقشی دارند
در Basic Authentication، کلاینت username و password را در Header Authorization میفرستد. ساختار کلی آن به شکل زیر است:
Authorization: Basic <base64(username:password)>
یعنی مقدار username:password به Base64 تبدیل میشود و در Header قرار میگیرد.
مثال:
Authorization: Basic YWxpOjEyMzQ1Ng==
Basic Auth ساده است، اما از نظر امنیتی ضعیفتر از مدلهای توکنی است، چون credential اصلی کاربر در هر درخواست ارسال میشود.
خود Base64 هم Encryption نیست؛ فقط Encoding است. بنابراین Basic Auth فقط وقتی قابل قبول است که ارتباط حتماً روی HTTPS باشد.
معمولاً در این سناریوها دیده میشود:
سرویسهای ساده یا قدیمی
محیطهای داخلی
بعضی APIهای مدیریتی
بعضی تستهای اولیه یا سرویسهای legacy
در تست Basic Auth باید این سناریوها را بررسی کنی:
username/password معتبر → درخواست موفق
password اشتباه → 401 Unauthorized
username اشتباه → 401
نبودن Header Authorization → 401
خراب بودن فرمت Basic → خطای مناسب
بررسی اینکه API فقط روی HTTPS استفاده شود
در این مدل، کلاینت بهجای username/password در هر درخواست، یک Token میفرستد. این Token معمولاً در Header Authorization قرار میگیرد:
Authorization: Bearer <token>
مثال:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI...
Bearer یعنی هر کسی که این Token را در اختیار داشته باشد، میتواند از آن برای دسترسی استفاده کند. بنابراین Bearer Token باید مثل credential حساس در نظر گرفته شود.
معمولاً Bearer Token از یکی از این مسیرها به دست میآید:
Endpoint لاگین
سرویس احراز هویت
OAuth 2.0 Authorization Server
بعد از دریافت Token، کلاینت آن را در درخواستهای بعدی در Header میفرستد.
در APIهای مدرن، Bearer Token یکی از رایجترین روشهای احراز هویت است، مخصوصاً وقتی:
سیستم Sessionless باشد
API مبتنی بر JWT یا token-based auth باشد
چند سرویس با هم کار کنند
اپ موبایل یا فرانتاند با بکاند صحبت کند
در تست Bearer Token باید این موارد بررسی شوند:
token معتبر → درخواست موفق
token حذف شود → 401 Unauthorized
token اشتباه یا دستکاریشده باشد → 401
token منقضی باشد → 401
token کاربر بدون مجوز روی resource ممنوع → 403 Forbidden
token revoke شده دیگر نباید معتبر باشد
API Key یک کلید شناسایی برای Client یا Consumer است که همراه درخواست ارسال میشود تا API بداند درخواست از کدام اپلیکیشن یا مصرفکننده آمده است.
API Key معمولاً در یکی از این محلها قرار میگیرد:
Header
Query Parameter
گاهی Body
مثال در Header:
x-api-key: 123456789abcdef
مثال در Query:
GET /customers?api_key=123456789abcdef
API Key بیشتر برای شناسایی Client/App، کنترل مصرف، Rate Limiting و Quota Management استفاده میشود.
در بعضی سیستمها API Key نقش Authentication هم دارد، اما از نظر معماری معمولاً Bearer/OAuth بالغتر و امنتر هستند.
اگر API Key در Query String ارسال شود، احتمال ثبت شدن آن در Logs، Proxy، Browser History یا Monitoring Tools بیشتر است. برای همین، ارسال آن در Header معمولاً امنتر است.
در تست API Key باید این موارد را بررسی کنی:
key معتبر → درخواست موفق
key حذف شود → خطای مناسب
key اشتباه/منقضی/غیرفعال → 401 یا 403
اگر key فقط در Header مجاز است، ارسال در Query باید مطابق Contract بررسی شود
نشت API Key در URL یا logها از نظر امنیتی ریسک مهمی است
OAuth 2.0 یک Authorization Framework استاندارد برای صدور و مدیریت Token است.
در عمل، OAuth 2.0 کمک میکند Client بدون ارسال مستقیم username/password در هر درخواست، از طریق Access Token به API دسترسی بگیرد.
به زبان ساده:
Client از Authorization Server توکن میگیرد
API اصلی یا Resource Server آن Token را بررسی میکند
اگر Token معتبر باشد، دسترسی میدهد
معمولاً این نقشها را داریم:
Resource Owner: صاحب داده، معمولاً کاربر
Client: اپلیکیشن یا سیستمی که درخواست میزند
Authorization Server: سروری که Token صادر میکند
Resource Server: API اصلی که داده را نگه میدارد و Token را اعتبارسنجی میکند
Access Token توکنی است که برای دسترسی به API استفاده میشود. این توکن معمولاً کوتاهعمر است و در Header به شکل Bearer ارسال میشود:
Authorization: Bearer <access_token>
دسترسی به Resourceهای API
حمل اطلاعاتی مثل هویت کاربر، زمان انقضا، scope یا claimها
جایگزین ارسال مستقیم username/password در هر درخواست
بعد از Login یا OAuth Flow صادر میشود
در هر Request محافظتشده استفاده میشود
وقتی منقضی شد، دیگر نباید برای API قابل قبول باشد
در تست Access Token باید این موارد بررسی شوند:
access token معتبر → درخواست موفق
access token منقضی → 401 Unauthorized
access token دستکاریشده → 401
access token بدون scope لازم → 403 Forbidden
access token کاربر A روی دادهی کاربر B → باید مطابق Authorization کنترل شود
Refresh Token برای گرفتن Access Token جدید استفاده میشود، وقتی Access Token منقضی شده باشد.
یعنی کاربر یا Client مجبور نیست دوباره از اول login کند؛ بهجای آن با Refresh Token از Authorization Server یک Access Token جدید میگیرد.
تمدید نشست بدون ورود مجدد
کاهش نیاز به نگهداشتن Access Token بلندمدت
افزایش امنیت با کوتاهعمر نگه داشتن Access Token
برای صدا زدن API
کوتاهعمر
در Header Bearer استفاده میشود
برای گرفتن Access Token جدید
معمولاً بلندعمرتر
معمولاً فقط به Authorization Server ارسال میشود، نه به همهی APIها
در تست Refresh Token باید این سناریوها بررسی شوند:
refresh token معتبر → access token جدید صادر شود
refresh token اشتباه یا منقضی → خطای مناسب
refresh token revoke شده → نباید کار کند
refresh token متعلق به client یا user دیگر → نباید قابل استفاده باشد
اگر سیستم rotation دارد، بعد از استفاده از refresh token قبلی، reuse آن نباید مجاز باشد
این نکته خیلی مهم است:
فقط روش ارسال Token در Request است:
Authorization: Bearer <token>
مکانیزم یا Framework صدور و مدیریت Token است.
یعنی معمولاً OAuth 2.0 توکن صادر میکند و آن Token بعداً به شکل Bearer Token در API استفاده میشود.
پس:
OAuth 2.0 = سازوکار گرفتن/تمدید/مدیریت Token
Bearer Token = روش استفاده از Token در درخواست
وقتی احراز هویت انجام نشده یا Token/Credential معتبر نیست. مثال:
Token ارسال نشده
Password اشتباه است
Access Token منقضی شده
API Key نامعتبر است
وقتی کاربر احراز هویت شده، ولی اجازه دسترسی به Resource یا عملیات موردنظر را ندارد. مثال:
Token معتبر است ولی scope لازم ندارد
کاربر معمولی میخواهد عملیات Admin انجام دهد
کاربر به دادهی مشتری دیگر دسترسی ندارد
ارسال مستقیم username/password در Header Authorization. ساده است، ولی ضعیفتر و وابسته به HTTPS.
ارسال Token در Header Authorization. رایج در APIهای مدرن و Sessionless.
کلید شناسایی Client/App برای دسترسی یا کنترل مصرف API. معمولاً در Header یا Query ارسال میشود.
چارچوب استاندارد صدور و مدیریت Access Token و Refresh Token برای دسترسی امنتر و حرفهایتر به API.
Backend Tester باید بتواند:
نوع احراز هویت API را از Swagger، Headers یا Contract تشخیص دهد
Headerهای امنیتی مثل Authorization یا x-api-key را درست ست کند
تفاوت 401 و 403 را بداند
سناریوهای منفی مثل missing token، expired token، invalid API key و refresh failure را تست کند
بفهمد مشکل از Authentication است یا Authorization
در تحلیل Defect تشخیص دهد Failure از Token validation، Session management، Scope/Role یا Refresh flow آمده است
در پاسخ امتحانی فقط ننویس:
Authentication یعنی احراز هویت و انواعش Basic و Bearer و OAuth است.
این پاسخ ضعیف است. پاسخ خوب باید این کلیدواژهها را داشته باشد:
Authorization Header, Basic, Bearer, API Key, OAuth 2.0, Access Token, Refresh Token, 401 Unauthorized, 403 Forbidden, Token Expiry, Token Validation, Authentication vs Authorization
در APIها، Authentication مکانیزمی برای احراز هویت Client یا کاربر است و مشخص میکند چه کسی درخواست را ارسال کرده است. روشهای رایج آن شامل Basic Authentication با ارسال username/password در Header Authorization، Bearer Token با ارسال Token در Header، API Key برای شناسایی Client و OAuth 2.0 برای صدور و مدیریت Access Token و Refresh Token است. Access Token برای دسترسی به API استفاده میشود و Refresh Token برای دریافت Access Token جدید بعد از انقضا به کار میرود. در تست API باید سناریوهایی مثل missing token, invalid credential, expired token, invalid API key و تفاوت 401 و 403 بررسی شوند.
Authentication Authorization Basic Auth Bearer Token API Key OAuth 2.0 Access Token Refresh Token Authorization Header Token Validation Token Expiry 401 Unauthorized 403 Forbidden Credential Sessionless Authentication Authorization Server Resource Server Client Resource Owner Scope Token Rotation Revoked Token
Authentication (فرایند احراز هویت کاربر یا کلاینت): برای تشخیص هویت درخواستکننده در API استفاده میشود.
Authorization (کنترل سطح دسترسی پس از احراز هویت): مشخص میکند کاربر یا کلاینت بعد از احراز هویت به چه Resource یا عملیاتی دسترسی دارد.
Basic Auth (روش احراز هویت با ارسال username و password در Header Authorization): در سرویسهای ساده یا قدیمی دیده میشود و نیازمند HTTPS است.
Bearer Token (توکنی که در Header Authorization برای دسترسی به API ارسال میشود): رایجترین مدل احراز هویت توکنی در APIهای مدرن است.
API Key (کلید شناسایی Client یا Consumer): برای شناسایی اپلیکیشن، کنترل مصرف، rate limiting و گاهی Authentication استفاده میشود.
OAuth 2.0 (چارچوب استاندارد صدور و مدیریت Token): برای دسترسی امن و کنترلشده به APIها با استفاده از Access Token و Refresh Token استفاده میشود.
Access Token (توکن کوتاهعمر برای دسترسی به API): در Header بهصورت Bearer ارسال میشود و برای فراخوانی endpointهای محافظتشده کاربرد دارد.
Refresh Token (توکن مورد استفاده برای گرفتن Access Token جدید): در زمان انقضای Access Token برای تمدید نشست بدون login مجدد استفاده میشود.
Authorization Header (هدر حاوی اطلاعات احراز هویت مثل Basic یا Bearer): محل اصلی ارسال credential یا token در بسیاری از APIهاست.
Token Validation (اعتبارسنجی Token در سمت سرور): برای بررسی صحت، انقضا، امضا، scope و مجوزهای Token استفاده میشود.
Token Expiry (انقضای Token پس از مدت مشخص): برای محدود کردن عمر توکن و افزایش امنیت استفاده میشود.
401 Unauthorized (خطای احراز هویت ناموفق): وقتی credential یا token وجود ندارد یا معتبر نیست استفاده میشود.
403 Forbidden (خطای عدم مجوز): وقتی کاربر احراز هویت شده ولی اجازه دسترسی به Resource یا عملیات را ندارد استفاده میشود.
Credential (اطلاعات احراز هویت مثل username/password یا token): برای اثبات هویت درخواستکننده استفاده میشود.
Sessionless Authentication (احراز هویت بدون نگهداری session سمت سرور): معمولاً با Bearer Token یا JWT در APIهای مدرن دیده میشود.
Authorization Server (سروری که Token صادر میکند): در OAuth 2.0 مسئول صدور Access Token و Refresh Token است.
Resource Server (سروری که API و Resource را ارائه میدهد): Token را اعتبارسنجی میکند و در صورت مجاز بودن پاسخ میدهد.
Client (اپلیکیشن یا سیستمی که درخواست API ارسال میکند): در OAuth و سایر مدلهای Authentication مصرفکننده سرویس است.
Resource Owner (مالک داده یا کاربر نهایی): در OAuth 2.0 معمولاً همان کاربر است که دسترسی به Resource از طرف او صادر میشود.
Scope (محدوده دسترسی Token): مشخص میکند Token برای چه عملیات یا Resourceهایی معتبر است.
Token Rotation (تعویض Token، بهویژه Refresh Token، بعد از استفاده): برای افزایش امنیت و جلوگیری از سوءاستفاده از Tokenهای سرقتشده کاربرد دارد.
Revoked Token (توکنی که باطل شده و دیگر نباید پذیرفته شود): در Logout، امنیت یا مدیریت نشست اهمیت دارد.