احراز هویت و توکنها
زربان سازمانی از جریان client_credentials استفاده میکند: کلید مخفی سازمان را با یک توکن کوتاهعمر تعویض میکنید و آن توکن را روی درخواستها میفرستید. کلید مخفی خودش هرگز روی درخواستهای عادی نمیرود.
دو چیزی که ممکن است غافلگیرتان کند
-
clientIdشما همان شناسه سازمان است — رشتهای کوتاه و خوانا مانندPLN، نه یک UUID. اگر در داشبورد دنبال فیلد جداگانهای به نامclientIdمیگردید، پیدایش نمیکنید؛ همان شناسه سازمان است. -
grantTypeمقدارClientCredentialsاست — با همین املا و همین حروف بزرگ، نهclient_credentialsکه در بسیاری از سرویسهای دیگر مرسوم است.
اعتبارنامهها در داشبورد سازمانی، زیر کلیدهای API، نگهداری میشوند:

گرفتن توکن
curl -sS -X POST "https://hd.zarban.io/oauth/token" \
-H "Content-Type: application/json" \
-d '{
"clientId": "PLN",
"clientSecret": "sk_live_8f2c1a9b3e7d4f60a1c2b3d4e5f60718",
"grantType": "ClientCredentials"
}'
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
"refreshToken": "rt_3a1f9c2e7b8d4056a9c1e2f3b4d5e6f7",
"expiresIn": 3600
}
| فیلد | عمر | کارش چیست |
|---|---|---|
accessToken | ۱ ساعت (expiresIn بر حسب ثانیه) | روی هدر Authorization هر درخواست میرود. |
refreshToken | ۹۰ روز | برای گرفتن توکن دسترسی تازه، بدون فرستادن دوباره کلید مخفی. |
استفاده از توکن
curl -sS "https://hd.zarban.io/accounts?entityId=PLN&limit=20" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
تازه کردن توکن
curl -sS -X POST "https://hd.zarban.io/oauth/refresh" \
-H "Content-Type: application/json" \
-d '{
"refreshToken": "rt_3a1f9c2e7b8d4056a9c1e2f3b4d5e6f7"
}'
پاسخ دقیقاً همان ساختار /oauth/token است.
توکن تازهسازی میچرخد. هر بار که /oauth/refresh را صدا میزنید، refreshToken جدیدی میگیرید و قبلی دیگر کار نمیکند. اگر پاسخ را ذخیره نکنید، در تازهسازی بعدی با 401 روبهرو میشوید و باید از کلید مخفی دوباره شروع کنید. هر دو توکن را با هم ذخیره کنید، نه فقط accessToken را.
الگوی درست در سرویس شما
برای هر درخواست یک توکن نگیرید. این کار هم کند است و هم بیدلیل روی سرویس احراز هویت فشار میآورد.
الگوی پیشنهادی:
-
توکن و زمان انقضایش را در حافظه یا کش مشترک نگه دارید.
-
پیش از هر درخواست، اگر کمتر از حدود ۵ دقیقه تا انقضا مانده بود، تازهاش کنید. این حاشیه نمیگذارد توکن درست وسط ارسال یک درخواست منقضی شود.
-
اگر با وجود این، پاسخ
401گرفتید: یک بار تازه کنید و همان درخواست را دوباره بفرستید. اگر باز401شد، خطا را به لایه بالاتر بدهید — دوباره تلاش نکنید، چون احتمالاً کلید مخفی باطل شده است. -
در سرویس چندنمونهای، تازهسازی را قفل کنید یا توکن را در کش مشترک بگذارید؛ وگرنه هر نمونه جداگانه تازه میکند و چون توکن تازهسازی میچرخد، نمونهها توکن یکدیگر را باطل میکنند.
نگهداری کلید مخفی
- کلید مخفی را در متغیر محیطی یا سرویس مدیریت اسرار نگه دارید؛ هرگز در کد، مخزن گیت یا فایل پیکربندی نسخهدار.
- کلید مخفی را در لاگ ننویسید. توکن دسترسی را هم ننویسید.
- کلید مخفی متعلق به سازمان است، نه به یک نفر. کارمندی که سازمان را ترک میکند دلیل کافی برای چرخاندن کلید است.
چرخاندن کلید
از داشبورد سازمانی، یا با POST /tenants/{id}/secret:
curl -sS -X POST "https://hd.zarban.io/tenants/PLN/secret" \
-H "Authorization: Bearer $ZARBAN_TOKEN"
چرخاندن کلید فوری اعمال میشود و کلید قبلی را بلافاصله باطل میکند؛ کلید تازه هم فقط در همین پاسخ بهصورت متن ساده برمیگردد. تا لحظهای که کلید تازه روی همه نمونههای سرویس شما مستقر شود، فراخوانی /oauth/token با کلید قدیمی پاسخ 401 میگیرد. مسیر پیشنهادی این است که استقرار کلید تازه را آماده کنید و سپس چرخاندن را اجرا کنید.