سیستم قفل آنلاین کمد باشگاه با یکپارچهسازی پرداخت و کنترل دسترسی
سیستم قفل آنلاین کمد باشگاه در GymL بر پایه معماری دولایه دستگاه لبهای (Edge) و هاب ابری پیادهسازی میشود تا فرمانهای باز و بست در کمتر از ۱۵۰ میلیثانیه به قفل برسد. ما از میکروکنترلرهای ESP32 با بلوتوث LE برای ارتباط نزدیک و ماژول WiFi برای دسترسی پایدار استفاده میکنیم و تمام پیامها در TLS 1.3 تونل میشود تا شنود در شبکه محلی عملاً ناممکن شود.
برد قفل در هر بار بوت، کلیدهای موقت را از KMS ابری دریافت و در Secure Element ذخیره میکند تا در برابر استخراج کلید سختافزاری مقاوم باشد. پروتکل فرمان دهی ما Challenge/Response با nonce و امضای ECDSA است و برای جلوگیری از replay، هر فرمان دارای timestamp و window قابل تنظیم است. نسخه فریمور در هدر پیام قرار میگیرد تا ناسازگاری پروتکل بهصورت خودکار تشخیص داده شود.
ماژول پرداخت به API درگاه داخلی GymL متصل است و توکنهای پرداخت موفق را به صورت امضاشده به Edge ارسال میکند تا قفل فقط پس از تأیید تراکنش باز شود. این مسیر با صف مقاوم در برابر قطع شبکه (retry با backoff نمایی) طراحی شده و اگر سه بار پاسخ 5xx دریافت شود، در حالت امن قفل بسته باقی میماند و پیام خطا در لاگر محلی ثبت میشود.
مدیریت کاربران بر پایه OpenID Connect است؛ کاربر پس از احراز هویت در اپ یا کیوسک، یک Access Token با claim های locker_access دریافت میکند. Edge قبل از اجرای فرمان، امضای توکن را با کلید عمومی کششده از JWKS سرور اعتبارسنجی میکند و محدوده مجاز (locker_id و مدت اعتبار) را کنترل میکند تا دسترسی به کمدهای دیگر ممکن نباشد.
برای سناریوهای آفلاین، هر دستگاه یک لیست مجوز کوتاهمدت (Offline ACL) را با امضای سرور ذخیره میکند که شامل locker_id، زمان انقضا و سطح دسترسی است. اگر اتصال قطع شود، فقط مجوزهای فعال در ACL اجرا میشوند و هر رویداد در صف محلی persist میشود تا پس از بازگشت شبکه به سرور Push گردد و لاگها از دست نروند.
پایش سلامت با ترکیب Heartbeat هر ۳۰ ثانیه و سنجش زمان پاسخ رله قفل انجام میشود؛ اگر تاخیر از ۲۰۰ میلیثانیه عبور کند، هشدار در Prometheus ثبت و Webhook به NOC ارسال میشود. سنسور موقعیت در قفل نصب شده تا باز و بسته شدن واقعی با فرمان منطقی تطبیق داده شود و در صورت mismatch، قفل در حالت fail-secure قفل میماند.
برای جلوگیری از دستکاری فیزیکی، سوئیچ تمپر در بدنه تعبیه شده و هر بار باز شدن درب بدنه به صورت رویداد امنیتی با سطح Critical ثبت میشود. همچنین firmware کامل با امضای Ed25519 عرضه میشود و بوتلودر فقط زمانی بهروزرسانی OTA را میپذیرد که زنجیره اعتماد کامل تأیید شود؛ در غیر این صورت به نسخه پایدار قبلی برمیگردد.
در لایه API، تمام فراخوانیها پشت درگاه Rate Limit مبتنی بر توکن قرار دارد و برای جلوگیری از Brute force، هر IP بیش از ۵ خطای متوالی 401 دریافت کند بهمدت ۱۵ دقیقه مسدود میشود. لاگ ساختارمند در ELK ذخیره میشود و فیلدهای PII با الگوریتم FPE ماسک میشوند تا با الزامات حریم خصوصی مطابقت داشته باشد.
از منظر تجربه کاربری، جریان رزرو و باز کردن کمد در اپ موبایل با حالت Pre-authorization نمایش مییابد تا کاربر پیش از رسیدن به کمد، توکن آماده داشته باشد. انیمیشن وضعیت قفل با WebSocket بهروز میشود و در صورت قطع ارتباط، به صورت خودکار به Polling هر ۳ ثانیه تغییر میکند تا UI بدون وقفه باشد. همزمان APM بر روی مسیرهای /locker/issue و /locker/verify نصب شده و زمان پاسخ، نرخ خطا و تعداد retries به تفکیک شعب ثبت میشود تا SLA ۹۹.۷٪ حفظ گردد و در صورت عبور از آستانه، قفلها به حالت دستی و هشدار NOC میروند.
ایمنسازی دادهها با رمزنگاری AES-256-GCM در سطح Payload و نگهداری کلید در HSM ابری انجام میشود و بکاپهای پیکربندی قفلها در S3 با Bucket Policy محدود ذخیره میشوند؛ پیش از Restore، هش SHA-256 با Manifest امضاشده تطبیق داده میشود. برای اطمینان از تطبیق با استانداردهای ایمنی و بیمه، آزمونهای Load Test فصلی با ۵۰۰۰ فرمان همزمان و PenTest فیزیکی روی بدنه قفل انجام و نتایج برای Auditing و الزامات ISO 27001 و PCI DSS ثبت میشود.
پرسشهای متداول:
پرسش ۱: در زمان قطعی اینترنت چه میشود؟ پاسخ: مجوزهای امضاشده در ACL آفلاین فعال میمانند و همه رویدادها در صف محلی ذخیره و بعداً همگام میشود.
پرسش ۲: آیا امکان اتصال به درگاه پرداخت دیگری هست؟ پاسخ: بله، لایه پرداخت با Webhook و امضای HMAC ماژولار است و درگاه جدید با افزودن secret جدید فعال میشود.
پرسش ۳: آیا تمپر قفل لاک میکند؟ پاسخ: بله، رویداد تمپر قفل را fail-secure میکند و نیاز به احراز مدیر دارد.