GitHub غيّر طول التوكن: افحص تطبيقك قبل 27 أبريل
لو تطبيقك بيتعامل مع GitHub App installation token كأنه 40 حرفًا ثابتًا، عندك فحص صغير لازم يتعمل النهارده قبل ما التكامل يقع في الإنتاج.
مستوى القارئ: متوسط
المشكلة باختصار
GitHub أعلن في 24 أبريل 2026 أنه سيبدأ من 27 أبريل 2026 طرح صيغة جديدة لتوكنات GitHub App installation. التغيير الأساسي إن التوكن الجديد أطول بكثير، وقد يصل تقريبًا إلى 520 حرفًا بدل افتراض 40 حرفًا عند بعض الأنظمة القديمة. الصيغة ستظل تبدأ بـ ghs_، لكن شكلها سيصبح أقرب إلى ghs_APPID_JWT.
الخبر مهم للمطور العربي لأنه يلمس أدوات بنستخدمها يوميًا: GitHub Actions، Dependabot، Slack integrations، Teams، وأي GitHub App خاص بالشركة. لو عندك SaaS بيسحب repos أو يعلّق على pull requests أو يعمل checks، المشكلة مش في GitHub نفسه. المشكلة في الكود اللي افترض إن التوكن قصير أو قابل للفهم.
مثال واضح قبل التفاصيل
افترض إن عندك خدمة بتخزّن توكن GitHub App في جدول integrations. المطور القديم كتب العمود كده لأنه شاف التوكنات كلها قصيرة:
ALTER TABLE integrations
ADD COLUMN github_token VARCHAR(64);
الكود كان شغال سنين. فجأة التوكن الجديد يوصل إلى 520 حرفًا تقريبًا. النتيجة المتوقعة واحدة من ثلاث: insert يفشل، التوكن يتقص لو قاعدة البيانات أو ORM متساهلة، أو الطلبات ترجع 401 لأن القيمة المخزنة ناقصة. ركز: دي مشكلة افتراضات، مش مشكلة authentication.
علميًا، التوكن لازم يتعامل كـ opaque string. يعني سلسلة سرية تمرّرها كما هي، ولا تفكها، ولا تتوقع طولها، ولا تبني regex ضيق عليها. GitHub نفسه أوضح أن العملاء لا يجب أن يعتمدوا على محتوى JWT الداخلي أو يحاولوا التحقق منه محليًا.
افحص الكود في 10 دقائق
ابدأ بأبسط فحص. دور على regex أو validation بيقيّد ghs_ بعدد حروف ثابت. الأمر ده مناسب لمستودع Node أو Python أو Go، وممكن تشغله من root المشروع:
rg "ghs_\[A-Za-z0-9\]\{36\}|ghs_\[A-Za-z0-9_\-\]\{36,64\}|VARCHAR\(64\)|String\(64\)|max_length=64|length\s*===\s*40" .
لو ظهر لك validation بالشكل ده، البديل مش إنك تزود الرقم إلى 520 وخلاص. أفضل طريقة إنك تتحقق من وجود prefix عام فقط، وتخلي التخزين يسمح بطول كافي: