---
type: explanation
title: أغلِق موقعًا كاملًا ببوّابة على وكيلك العكسي
summary: ما بوّابة الوكيل، ولمن هي، وكيف يحلّ زائر لعبة واحدة ليكسب تصريحًا قصير العمر يمرّر طلباته، كي تحمي تطبيقات لا تستطيع إدراج الأداة فيها.
---

الطريقة المعتادة لاستخدام Caputchin هي إدراج [الأداة](/docs/site-keys/embedding-the-widget) في صفحة والتحقّق من الرمز من خادمك الخلفي. يحتاج ذلك مكانًا لوضع الأداة وخادمًا خلفيًّا لفحص الرمز. بوّابة الوكيل لا تحتاج أيًّا منهما. تضع تحقّقًا بملء الصفحة أمام موقع أو مسار كامل عند **وكيلك العكسي**: يحلّ زائر لعبة واحدة، ويكسب تصريحًا قصير العمر، ويتجوّل في الموقع حتى ينتهي التصريح. التطبيق المحمي لا يُمَسّ أبدًا.

بما أنه لا يُضاف شيء إلى التطبيق نفسه، هذه هي طريقة حماية المضيفين الذين لا تستطيع إدراج سكربت فيهم، بوّابة تسجيل دخول أحادية الصفحة مُصرَّفة، أو جهاز مغلق، أو أداة داخلية تجلس خلف وكيل مصادقة.

<Callout type="info">
بوّابة الوكيل متاحة على خطّة Alpha فما فوق، مفعّلة لكل مفتاح موقع. يستضيف Caputchin التحدّي ويُصدر التصريح؛ وأنت توجّه وكيلك العكسي القائم (nginx، أو Traefik، أو Caddy، أو أيًّا كان ما يقف أمام تطبيقك) إليها.
</Callout>

## لمن هي

الجأ إلى البوّابة حين لا تناسب الأداة المضمّنة:

- **التطبيق لا مكان فيه للأداة.** بوّابة تسجيل دخول محكمة (مثل Authelia)، أو جهاز مورّد، أو أي واجهة لا تستطيع تحريرها.
- **تريد إغلاق سطح كامل ببوّابة، لا نموذجًا واحدًا.** "أثبِت أنك إنسان قبل أن تبلغ هذا الموقع" بدل فحص على إرسال واحد.
- **لا خادم خلفي لديك للتحقّق من رمز.** الوكيل هو من يفرض القاعدة؛ ولا نداء `/siteverify` لتكتبه.

لصفحة أو نموذج عادي تتحكّم فيه، أدرِج [الأداة](/docs/site-keys/embedding-the-widget) بدلًا من ذلك، فهي أخفّ ولا تعيد توجيه الزائر. إن كان لديك نموذج بلا خادم خلفي، فإن [التحقّق المُستضاف](/docs/hosted-verification/overview) أنسب.

## كيف تعمل

حلٌّ واحد يشتري طلبات كثيرة. يلعب الزائر اللعبة مرة واحدة؛ وبعدها يمرّر كوكي طرف أول طلباته حتى ينتهي.

```mermaid
sequenceDiagram
    participant V as الزائر
    participant P as وكيلك العكسي
    participant C as Caputchin
    V->>P: يطلب رابطًا مغلقًا
    P->>C: فحص authz (يمرّر كوكي cpt_gate)
    C-->>P: 401، لا تصريح صالح بعد
    P-->>V: 302 إلى التحدّي المُستضاف
    V->>C: يلعب اللعبة
    C-->>V: تصريح، auto-POST إلى ردّ ندائك
    V->>P: POST التصريح إلى /__cpt/callback
    P-->>V: يضبط كوكي cpt_gate، يعيد التوجيه رجوعًا
    V->>P: يطلب ثانيةً (الكوكي حاضر)
    P->>C: فحص authz
    C-->>P: 204 اسمح
    P-->>V: يردّ تطبيقك
```

يجري الوكيل نداء **مُخوِّل** صغيرًا إلى Caputchin على كل طلب. حين لا يحمل الطلب تصريحًا صالحًا، يجيب Caputchin بـ `401` ويعيد الوكيل توجيه الزائر إلى التحدّي المُستضاف. وحين يكون التصريح حاضرًا وصالحًا، يجيب Caputchin بـ `204` ويمرّر الوكيل الطلب إلى تطبيقك.

## كوكي السماح

يعيش التصريح في كوكي طرف أول اسمه `cpt_gate`، يضبطه على نطاقك أنت ردّ نداء صغير تستضيفه. إنه رمز موقّع قصير العمر، غير مربوط بجهاز، فسلامته تأتي كلّها من سمات الكوكي (`HttpOnly`، و`Secure`، و`SameSite=Lax`) ومن مدّة TTL قصيرة تختارها. ولأنه يضبط كوكي على زوّارك، أفصِح عنه في سياسة الكوكي عندك. [دليل الإعداد](/docs/proxy-page-gate/set-up) يمرّ عبر ردّ النداء والسمات المطلوبة.

## ما الذي تُرك عمدًا

- **لا بوّابة ذاتية الاستضافة.** يستضيف Caputchin التحدّي ويتحقّق من التصريح؛ وأنت لا تشغّل مُتحقّقًا. وكيلك يمرّر كوكي ويتبع عمليات إعادة التوجيه فقط.
- **فحص لكل طلب، لا تحقّق محلّي من الرمز.** يسأل الوكيل Caputchin على كل طلب. و**وضع الفشل** الذي تختاره (مفتوح أو مغلق) يقرّر ما يحدث إن صار Caputchin غير قابل للوصول لبرهة.
- **سماح لكل مفتاح موقع، بنطاق كوكي.** يمرّر التصريح أصلًا واحدًا، لا حسابًا كاملًا ولا عدّة نطاقات، لأنه كوكي طرف أول عادي.
- **ليست جلسة ولا تسجيل دخول.** تثبت البوّابة أن إنسانًا بلغ الموقع؛ ويبقى تطبيقك يتولّى المصادقة وحدود المعدّل الخاصّة به. الاثنان يتراكمان.

## انظر أيضًا

- [أعدّ بوّابة الوكيل](/docs/proxy-page-gate/set-up): فعّلها وصِل وكيلك من طرف إلى طرف.
- [وصفات الوكيل العكسي](/docs/proxy-page-gate/reverse-proxy-recipes): nginx، وTraefik، وCaddy، ومثال Authelia المحلول.
- [إحصاءات بوّابة الوكيل](/docs/proxy-page-gate/statistics): اقرأ نسبة المرور المباشر إلى التحدّي.
- [التحقّق المُستضاف](/docs/hosted-verification/overview): الخيار بلا خادم خلفي حين يكون لديك فعلًا نموذج توجّهه إلينا.
