انواع احراز هویت در GraphQL
در GraphQL، مانند REST، نیاز است که دسترسی به منابع محدود و امن شود. با توجه به اینکه تمام درخواستها معمولاً از یک endpoint واحد عبور میکنند (/graphql
)، پیادهسازی احراز هویت کمی متفاوت است. روشهای رایج عبارتاند از:
۱. Token-Based Authentication
در این روش، کاربر پس از ورود، یک توکن (مثل JWT) دریافت میکند و در هر درخواست GraphQL آن را به هدر HTTP اضافه میکند:
Authorization: Bearer <token>
- مزایا: ساده و مناسب برای SPA و موبایل.
- پیادهسازی: در FastAPI میتوان یک Dependency ساخت که توکن را بررسی کند و اطلاعات کاربر را به context منتقل کند.
۲. Session-Based Authentication
این روش مشابه REST عمل میکند و از کوکی برای نگهداری اطلاعات نشست کاربر استفاده میشود:
- مزایا: مدیریت نشست ساده و مناسب برای وب اپلیکیشن سنتی.
- پیادهسازی: Cookie حاوی Session ID ارسال میشود و در Resolverها با بررسی آن، کاربر شناسایی میشود.
۳. API Key
برخی سرویسها، به جای ورود کاربر، از API Key برای دسترسی به منابع استفاده میکنند. این کلید معمولاً در هدر HTTP یا query param ارسال میشود:
X-API-Key: your_api_key
- مزایا: ساده برای سرویسهای ماشین به ماشین.
- معایب: محدودیت در مدیریت کاربران و دسترسیهای پیچیده.
۴. OAuth / OpenID Connect
برای پروژههای بزرگ و نیاز به SSO یا اتصال به سرویسهای خارجی، میتوان از استاندارد OAuth یا OpenID Connect استفاده کرد:
- مزایا: امنیت بالا و امکان اتصال به سرویسهای ثالث.
- پیادهسازی: پس از دریافت توکن از Provider، میتوان در context GraphQL، اطلاعات کاربر را منتقل کرد.
نکات مهم
- به دلیل یک endpoint بودن GraphQL، بررسی احراز هویت معمولاً در سطح Resolver یا با Middleware انجام میشود.
- میتوان ترکیبی از روشها استفاده کرد؛ مثلاً توکن JWT برای کاربران و API Key برای سرویسها.
- پیامهای خطا در صورت عدم احراز هویت باید استاندارد و بدون افشای اطلاعات حساس باشد.