forked from morrning/hesabixCore
181 lines
5.4 KiB
Markdown
181 lines
5.4 KiB
Markdown
# یکپارچهسازی 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`
|
||
|
||
```javascript
|
||
{
|
||
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}`
|
||
|
||
```php
|
||
#[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`
|
||
|
||
```php
|
||
#[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`
|
||
|
||
```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. تست درخواست مجوز
|
||
```bash
|
||
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
|
||
```bash
|
||
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. تست دریافت اطلاعات برنامه
|
||
```bash
|
||
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 |