أين تنكسر المفاتيح في الواقع
المفاتيح نادراً ما تفشل في الكود الذي يستخدمها. بل تفشل في الطريق إليه: نسخٌ التقط نصف النص، أو مُدخَل .env صارت علامات اقتباسه جزءاً من القيمة، أو سرّ CI حُفِظ بسطر جديد لاحق، أو نشرة شحنت مفتاح بيئة التجهيز إلى الإنتاج.
العائلة الأخرى إدارية. المفتاح أُلغي أو دُوِّر، أو يعود لمشروع غير الذي تستدعيه، أو أن IP خادمك ليس على القائمة المسموح بها التي تفرضها مؤسستك. كل واحدة من هذه تُرجع 401 نفسه — ولهذا تُشخّص بالطبقة لا بالتخمين.
الاستجابة
HTTP/1.1 401 Unauthorized
{
"error": {
"message": "Incorrect API key provided: sk-abc***. You can find your API key in your dashboard.",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
ذلك الجسم تمثيلي، لا نسخة حرفية. الجزء المُقنَّع يردّد ما أرسلته: إن لم يطابق المفتاح الذي قصدت تحميله، فالبيئة هي العلّة. ويجدر بك أن تعرف: 401 قد يعني أيضاً غياب عضوية المؤسسة أو IP خارج القائمة المسموح بها، و403 الذي يقول "Country, region, or territory not supported" هو جغرافيا، لا مصادقة.
تشخيص الـ90 ثانية
# 1. Is the env var what you think it is?
echo "len=${#OPENAI_API_KEY} head=${OPENAI_API_KEY:0:4} tail=${OPENAI_API_KEY: -4}"
# 2. Does the key itself pass auth?
curl -s https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
اقرأ الصدى أولاً. طول صفر يعني أن المتغيّر لم يُحمَّل قط. ذيلٌ يُظهر علامة اقتباس أو حرفاً غريباً يعني أن ملف البيئة مشوّه. إن بدا الصدى صحيحاً وأرجع الـ curl قائمة نماذج، فالمفتاح يعمل وتطبيقك يحمّل شيئاً آخر، عادةً عملية قديمة. وإن أرجع الـ curl خطأ 401 على مفتاح سُكَّ قبل دقائق، فكُفّ عن التحديق في النص وافحص نطاق المشروع وعضوية المؤسسة والقائمة المسموح بها.
امنع تكراره
ثلاث عادات تقاعد هذه العلّة. أبقِ المفاتيح في مدير أسرار، لا في ملفات تسافر مع المستودع. أصدِر مفتاحاً واحداً لكل بيئة، كي لا يلمس تسريب التجهيز الإنتاجَ. وشغّل فحصاً ذاتياً عند الإقلاع، استدعاءً مصادَقاً رخيصاً واحداً، كي يُفشِل مفتاح ميت النشرةَ، لا أول طلب لعميل. ومع عودة المصادقة مملّة، يصير السؤال المثير هو الإنفاق: يكلّف GPT-5 مبلغ $1.25 إدخالاً و$10 إخراجاً لكل مليون توكن، والترتيب يُظهر ما الذي تشتريه تلك الميزانية أيضاً.