تقنية
كيفية إنشاء JSON Web Token (JWT) باستخدام Google Apps Script

يمكنك استخدام Google Script لإنشاء JSON Web Tokens (JWT) التي يمكن توفيرها لتأمين المسارات بحيث يمكن فقط للطلبات التي تمت مصادقتها والتي تحتوي على رمز مميز صالح الاتصال بواجهات برمجة التطبيقات (على سبيل المثال، Zoom API).
تتكون جميع رموز الويب JSON من ثلاثة أجزاء:
- الرأس الذي يحدد خوارزمية التجزئة المستخدمة لتوقيع JWT وفك تشفيرها.
- الحمولة بتنسيق JSON الذي يحتوي على جميع بيانات المستخدم. ال
iat
وexp
تمثل الخصائص تاريخ الإصدار ووقت انتهاء الصلاحية على التوالي، ولكن يمكنك تمرير أي بيانات إلى الحمولة. - بيانات التوقيع التي تسمح لواجهات برمجة التطبيقات (API) بإثبات صحة رمز الوصول.
يتم ربط الأجزاء بنقطة (نقطة) ويتم تشفير البيانات في Base64 باستخدام Utilities.base64EncodeWebSafe
طريقة برمجة التطبيقات.
إنشاء رمز ويب JSON
const createJwt = ({ privateKey, expiresInHours, data = {} }) => {
// Sign token using HMAC with SHA-256 algorithm
const header = {
alg: 'HS256',
typ: 'JWT'
};
const now = Date.now();
const expires = new Date(now);
expires.setHours(expires.getHours() + expiresInHours);
// iat = issued time, exp = expiration time
const payload = {
exp: Math.round(expires.getTime() / 1000),
iat: Math.round(now / 1000)
};
// add user payload
Object.keys(data).forEach(function (key) {
payload[key] = data[key];
});
const base64Encode = (text, json = true) => {
const data = json ? JSON.stringify(text) : text;
return Utilities.base64EncodeWebSafe(data).replace(/=+$/, '');
};
const toSign = `${base64Encode(header)}.${base64Encode(payload)}`;
const signatureBytes = Utilities.computeHmacSha256Signature(toSign, privateKey);
const signature = base64Encode(signatureBytes, false);
return `${toSign}.${signature}`;
};
قم بإنشاء رمز مميز باستخدام مفتاحك الخاص والحمولة
const generateAccessToken = () => {
// Your super secret private key
const privateKey = 'ZPYu33tz8QYU3hwJQXgHpZsKfYn0r2poopBx7x1n3rmeIvuGU4wf65kk6rV1DrN';
const accessToken = createJwt({
privateKey,
expiresInHours: 6, // expires in 6 hours
data: {
iss: Session.getActiveUser().getEmail(),
userId: 123,
name: 'Amit Agarwal'
}
});
Logger.log(accessToken);
};
يمكنك لصق رمز الوصول الذي تم إنشاؤه في jwt.io وستتمكن من رؤية المحتوى (الحمولة) للرمز المميز الذي تم فك تشفيره. يرجى ملاحظة أنه إذا كان الرمز المميز يحتوي على بيانات توقيع غير صالحة، فقد يتم فك تشفير الحمولة كما تم تشفيرها في Base64.
فك تشفير حمولة JWT باستخدام Google Apps Script
const parseJwt = (jsonWebToken, privateKey) => {
const [header, payload, signature] = jsonWebToken.split('.');
const signatureBytes = Utilities.computeHmacSha256Signature(`${header}.${payload}`, privateKey);
const validSignature = Utilities.base64EncodeWebSafe(signatureBytes);
if (signature === validSignature.replace(/=+$/, '')) {
const blob = Utilities.newBlob(Utilities.base64Decode(payload)).getDataAsString();
const { exp, ...data } = JSON.parse(blob);
if (new Date(exp * 1000) < new Date()) {
throw new Error('The token has expired');
}
Logger.log(data);
} else {
Logger.log('🔴', 'Invalid Signature');
}
};
إذا كنت جديدًا في JWT، فإن مقاطع الفيديو التعليمية التي يقدمها Kyle Cook هنا وهنا هي مكان جيد للبدء.