5.4 KiB
5.4 KiB
یکپارچهسازی OAuth با Frontend
مشکل اصلی
سیستم OAuth قبلی در backend پیادهسازی شده بود اما frontend از axios استفاده میکند و نیاز به احراز هویت دارد. این باعث میشد که صفحه authorization نتواند با سیستم احراز هویت موجود کار کند.
راهحل پیادهسازی شده
1. صفحه Authorization در Frontend
فایل: webUI/src/views/oauth/authorize.vue
این صفحه شامل:
- احراز هویت خودکار: بررسی وضعیت لاگین کاربر با axios
- نمایش اطلاعات برنامه: نام، توضیحات، وبسایت
- لیست Scope ها: نمایش محدودههای دسترسی درخواستی
- دکمههای تأیید/رد: با طراحی زیبا و responsive
- مدیریت خطا: نمایش خطاها و loading states
2. Route جدید در Router
فایل: webUI/src/router/index.ts
{
path: '/oauth/authorize',
name: 'oauth_authorize',
component: () => import('../views/oauth/authorize.vue'),
meta: {
'title': 'مجوزدهی OAuth',
'login': true
}
}
3. API Endpoints جدید در Backend
الف) دریافت اطلاعات برنامه بر اساس Client ID
Route: GET /api/admin/oauth/applications/client/{clientId}
#[Route('/applications/client/{clientId}', name: 'api_admin_oauth_applications_by_client_id', methods: ['GET'])]
public function getApplicationByClientId(string $clientId): JsonResponse
ب) API endpoint برای پردازش مجوز
Route: POST /api/oauth/authorize
#[Route('/api/oauth/authorize', name: 'api_oauth_authorize', methods: ['POST'])]
public function authorizeApi(Request $request): JsonResponse
4. تغییرات در OAuthController
فایل: hesabixCore/src/Controller/OAuthController.php
- هدایت به Frontend: به جای نمایش صفحه Twig، کاربر به frontend هدایت میشود
- API endpoint جدید: برای پردازش مجوز از frontend
5. تنظیمات Security
فایل: hesabixCore/config/packages/security.yaml
- { path: ^/api/oauth, roles: ROLE_USER }
جریان کار جدید
1. درخواست مجوز
GET /oauth/authorize?client_id=...&redirect_uri=...&scope=...&state=...
2. هدایت به Frontend
Backend کاربر را به صفحه frontend هدایت میکند:
/u/oauth/authorize?client_id=...&redirect_uri=...&scope=...&state=...
3. احراز هویت در Frontend
- بررسی وضعیت لاگین با axios
- اگر لاگین نیست، هدایت به صفحه لاگین
- دریافت اطلاعات برنامه از API
4. نمایش صفحه مجوزدهی
- نمایش اطلاعات برنامه
- لیست scope های درخواستی
- دکمههای تأیید/رد
5. پردازش مجوز
- ارسال درخواست به
/api/oauth/authorize
- ایجاد authorization code
- هدایت به redirect_uri
مزایای این روش
✅ سازگاری با سیستم موجود
- استفاده از axios و احراز هویت موجود
- سازگار با router و navigation guard ها
✅ تجربه کاربری بهتر
- طراحی مدرن و responsive
- Loading states و error handling
- UI/UX یکپارچه با بقیه برنامه
✅ امنیت بیشتر
- احراز هویت خودکار
- بررسی دسترسیها
- مدیریت خطا
✅ قابلیت توسعه
- کد تمیز و قابل نگهداری
- جداسازی منطق frontend و backend
- امکان اضافه کردن ویژگیهای جدید
تست سیستم
1. تست درخواست مجوز
curl "https://your-domain.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=https://your-app.com/callback&response_type=code&scope=read_profile&state=test123"
2. تست API endpoint
curl -X POST "https://your-domain.com/api/oauth/authorize" \
-H "Content-Type: application/json" \
-H "X-AUTH-TOKEN: YOUR_TOKEN" \
-d '{
"client_id": "YOUR_CLIENT_ID",
"redirect_uri": "https://your-app.com/callback",
"scope": "read_profile",
"state": "test123",
"approved": true
}'
3. تست دریافت اطلاعات برنامه
curl -X GET "https://your-domain.com/api/admin/oauth/applications/client/YOUR_CLIENT_ID" \
-H "X-AUTH-TOKEN: YOUR_TOKEN"
نکات مهم
🔒 امنیت
- تمام درخواستها باید احراز هویت شوند
- بررسی دسترسیها در هر مرحله
- اعتبارسنجی پارامترها
🎨 UI/UX
- طراحی responsive
- Loading states
- Error handling
- Accessibility
🔧 نگهداری
- کد تمیز و قابل خواندن
- مستندات کامل
- تستهای مناسب
آینده
ویژگیهای پیشنهادی
- صفحه callback در frontend
- مدیریت توکنها
- آمار استفاده
- تنظیمات امنیتی پیشرفته
بهبودها
- Caching اطلاعات برنامه
- Offline support
- Progressive Web App features
- Analytics و monitoring
تاریخ ایجاد: 2025-08-16
وضعیت: فعال ✅
توسعهدهنده: Hesabix Team