لماذا بيانات الاعتماد المخزنة هي الأساس الخاطئ
البطاقة المحفوظة هي أداة لحاملها. من يحمل الرقم يمكنه الإنفاق بها، مرارًا وتكرارًا، حتى يقرر المُصدر أو التاجر خلاف ذلك. لا يوجد توجيه نظام، ولا تعليمة على مستوى الأداة، ولا قدر من سلسلة التفكير يغيّر هذه الخاصية. الوكيل الذي مُنح بطاقة مخزنة لا يملك ميزانية؛ بل يملك قدرة. والفرق مهم لأن القدرات لا تتقيد بالنية. إنها تتقيد بالتشفير ونقاط إنفاذ السياسة واستعداد المُصدر لرفض العملية.
بمجرد أن يحمل الوكيل بيانات اعتماد قابلة لإعادة الاستخدام، يصبح الإلغاء هو الضابط الوحيد المتبقي. والإلغاء خشن. لا يمكنه التمييز بين إعادة محاولة مشروعة وعملية مكررة، أو بين تاجر مصرح به وآخر مُستبدل، أو بين عملية شراء كبيرة واحدة وعشرين عملية صغيرة. كما أنه بطيء مقارنة بتنفيذ الوكيل. حلقة إلغاء تُقاس بالدقائق لا تحكم حلقة تُصدر نداءات بالمللي ثانية.
رموز إنفاق محدودة النطاق وأحادية الغرض
البديل هو إصدار بيانات اعتماد تكون هي نفسها السياسة. رمز الإنفاق محدود النطاق هو أثر موقّع يحمل مجموعة صغيرة وصريحة من المطالبات:
{
"issuer": "studio-payments",
"subject": "agent-run-8f3a",
"task_id": "replenish-inventory-2026-04-11",
"merchant_category": "office_supplies",
"merchant_id": "supplier-4421",
"amount_ceiling_minor": 25000,
"currency": "EUR",
"not_before": "2026-04-11T09:00:00Z",
"not_after": "2026-04-11T09:15:00Z",
"max_uses": 1,
"nonce": "b7c1...",
"signature": "..."
}
ثلاث خصائص تقوم بالعمل. أولًا، الرمز مرتبط بمعرّف مهمة محدد، لذا يمكن استرجاع المسار المفوِّض: يُعاد ربط الإنفاق بالتشغيل الذي طلبه، وليس فقط بحساب مستخدم. ثانيًا، الرمز أحادي الاستخدام أو قصير العمر، لذا يكون للأثر المسرّب قيمة محدودة. رقم بطاقة مسروق يمثل عبئًا حتى يتصرف المُصدر؛ أما رمز مسروق أحادي الاستخدام بنافذة خمس عشرة دقيقة وقفل تاجر فهو سلسلة ميتة بحلول الوقت الذي يوجّهه فيه المهاجم. ثالثًا، السقف مُقوَّم بالوحدات الصغرى ويُنفَّذ عند المسار، لا بواسطة الوكيل. لا يستطيع الوكيل رفع حدّه لأنه مطالبة موقّعة، وليس متغيرًا في توجيه.

المقايضة حقيقية: إصدار الرمز يضيف رحلة ذهاب وإياب واعتمادًا على التوقيع قبل حدوث أي عملية شراء. بالنسبة للنداءات منخفضة القيمة وعالية التكرار، هذه الكلفة الإضافية غير تافهة، وهي تفرض أن تكون خدمة الإصدار متاحة بقدر الوكيل نفسه. التصميم الذي يُصدر لكل نداء سيكون أبطأ من الذي يُصدر لكل جلسة؛ والتصميم الذي يُصدر لكل جلسة يعيد إدخال إعادة الاستخدام. الجواب الصادق هو الإصدار لكل مهمة بنافذة قصيرة وسقف منخفض، وقبول أن المهمة التي تتطلب عمليات شراء كثيرة تحتاج رموزًا كثيرة.
التفويض والتسوية
قرار الإنفاق وآلية الدفع قابلان للفصل وينبغي فصلهما. القرار ينتمي إلى السياسة: محرك قواعد يقيّم سياق المهمة والتاجر والمبلغ والسجل مقابل ميزانية، ويُصدر تفويضًا موقّعًا أو رفضًا. والآلية تنتمي إلى المسار: شبكة بطاقات، أو تحويل من حساب إلى حساب، أو طبقة تسوية بالعملات المستقرة. إبقاء هذين منفصلين يعني أن السياسة يمكن تدقيقها وإصدار نسخ منها واختبارها دون لمس المسار، ويمكن تبديل المسار دون إعادة كتابة السياسة.
مسارات التسوية التي تدعم المدفوعات الصغيرة البرمجية تناسب الشراء من آلة إلى آلة أكثر من تدفقات بطاقات المستهلك. تدفقات بطاقات المستهلك تُحسّن لحل النزاعات وحقوق رد المبالغ، وهي قيّمة للبشر ومكلفة الاستدعاء لكل نداء. المسار الذي يسوّي بشكل حتمي، بنهائية تُقاس بالثواني ورسوم لا تطغى على المبالغ الصغيرة، أنسب لوكيل يشتري نداء API واحدًا أو زيادة بيانات صغيرة. وحيث تُستخدم بطاقة، ينبغي أن يكون الرمز بطاقة افتراضية أحادية الاستخدام صادرة من الشبكة بدلًا من رقم أساسي مخزن، بحيث يُنفَّذ السقف وقفل التاجر من قبل المُصدر.
يجب أن تكون المطابقة تلقائية. المراجعة البشرية لا تتوسع لتشمل عمليات الشراء لكل نداء، وطابور من العمليات المعلقة يبطل الغرض من التفويض. ينبغي أن يحمل كل رمز معرّف المهمة والـ nonce، وينبغي مطابقة سجل التسوية في المسار مع سجل التفويض عبر هذين الحقلين. حالات عدم التطابق — عملية بدون تفويض مطابق، أو تفويض بدون عملية، أو عملية خارج النافذة — ينبغي أن تُثير استثناءً، لا تذكرة.
أنماط الفشل التي يجب التصميم ضدها
تجزئة المشتريات. الوكيل الذي يجد سقفًا سيقسّم، إن سُمح له، عملية شراء إلى عدة عمليات تبقى كل منها تحته. الدفاع هو ميزانية تراكمية لكل مهمة، وليس فقط سقفًا لكل عملية: تتبع خدمة التفويض إجمالي الإنفاق مقابل معرّف المهمة وترفض الرمز الذي سيتجاوز النية. سقف لكل عملية وحده مجرد اقتراح.
استبدال التاجر. رمز مُفوَّض للمورّد A لا ينبغي أن يُسوَّى عند المورّد B. اربط الرمز بمعرّف تاجر، وليس فقط بفئة، وتحقق عند التسوية. أقفال الفئات أضعف من أقفال التجار وينب

حلقات إعادة المحاولة. الاستجابة المفقودة لا يمكن تمييزها عن الطلب الفاشل إلا إذا كانت العملية متجانسة (idempotent). امنح كل رمز nonce واطلب من المسار رفض تسوية ثانية بنفس الـ nonce. عندها تُعيد إعادة محاولة الوكيل النتيجة الأصلية بدلًا من الخصم مرتين. هذا هو نفس الانضباط المتبع في مفاتيح التجانس في واجهات الدفع، مطبقًا على الإنفاق المفوَّض.
ما الذي يغيّره هذا
تنقل بيانات اعتماد الإنفاق محدودة النطاق نقطة التحكم من الإلغاء إلى الإصدار. يتوقف السؤال عن كونه "كيف نوقف الوكيل" ليصبح "ما الذي فوّضناه بالضبط، لأي مهمة، عند أي تاجر، حتى متى". هذا سؤال يستطيع التدقيق الإجابة عليه. أما البطاقة المخزنة فلا تستطيع.
الأسئلة الشائعة
س: هل الرمز محدود النطاق مجرد بطاقة افتراضية؟ ج: يمكن تنفيذه كواحدة، لكن الخاصية المهمة هي مجموعة المطالبات الموقّعة — معرّف المهمة، قفل التاجر، السقف، الانتهاء، الـ nonce — وليس صيغة البطاقة.
س: ما الذي يمنع الوكيل من طلب رمز جديد عندما يصل إلى السقف؟ ج: خدمة التفويض، وليس الوكيل. الميزانية التراكمية لكل مهمة ولكل تاجر تُنفَّذ عند الإصدار، لذا تُرفض الطلبات المتكررة على المهمة نفسها.
س: كيف يتفاعل هذا مع التسوية بالعملات المستقرة؟ ج: الرمز هو الصلاحية؛ وتحويل العملة المستقرة هو المسار. تُفحص مطالبات الرمز قبل توقيع التحويل، ويحمل مرجع التحويل الـ nonce للمطابقة.
س: ما هي الكلفة الرئيسية؟ ج: زمن استجابة الإصدار وخدمة إصدار يجب أن تكون متاحة بقدر الوكيل. الإصدار لكل مهمة بنوافذ قصيرة هو الحل الوسط المعتاد؛ أما الإصدار لكل جلسة فيعيد إدخال إعادة الاستخدام.
