مكتبة الرأس فقط لإنشاء JSON Web Tokens والتحقق من صحتها في C++ 11. للحصول على مقدمة رائعة، اقرأ هذا.
الهدف هو تقديم مجموعة متعددة الاستخدامات وقابلة للتطبيق عالميًا من الخوارزميات والفئات وهياكل البيانات، مما يعزز القدرة على التكيف والتكامل السلس مع المكتبات الأخرى التي قد تستخدمها بالفعل.
يدعم jwt-cpp بشكل شامل جميع الخوارزميات المحددة في المعيار. يسهل تصميمه المعياري الدمج السلس للخوارزميات الإضافية دون مواجهة أي تعقيدات. إذا كنت ترغب في المساهمة بخوارزميات جديدة، فلا تتردد في بدء طلب سحب أو فتح مشكلة.
للاكتمال، إليك قائمة بجميع الخوارزميات المدعومة:
HMSC | آر إس إيه | إكدسا | بي.اس.اس | إدسا |
---|---|---|---|---|
HS256 | RS256 | ES256 | PS256 | إد25519 |
HS384 | RS384 | ES384 | PS384 | إد448 |
HS512 | RS512 | ES512 | PS512 | |
ES256K |
يمكن العثور على تعليمات التثبيت هنا.
مثال بسيط هو فك تشفير رمز مميز وطباعة جميع مطالباته (لنجربه):
# include < jwt-cpp/jwt.h >
# include < iostream >
int main () {
std::string token = " eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCIsInNhbXBsZSI6InRlc3QifQ.lQm3N2bVlqt2-1L-FsOjtR6uE-L4E9zJutMWKIe1v1M " ;
auto decoded = jwt::decode (token);
for ( auto & e : decoded. get_payload_json ())
std::cout << e. first << " = " << e. second << std::endl;
}
يمكنك إنشاء هذا المثال وتشغيله محليًا بعد استنساخ المستودع. من خلال تشغيل بعض الأوامر، يمكننا رؤية محتويات حمولة JWT
cmake .
cmake --build . --target print-claims
./print-claims
# iss = "auth0"
# sample = "test"
ستلاحظ سريعًا أن JWT غير مشفرة ولكنها موقعة بشكل مشفر لتوفير عدم التنصل.
من أجل التحقق من الرمز المميز، عليك أولاً إنشاء أداة تحقق واستخدامها للتحقق من الرمز المميز الذي تم فك تشفيره.
auto verifier = jwt::verify()
.with_issuer( " auth0 " )
.with_claim( " sample " , jwt::claim(std::string( " test " )))
.allow_algorithm(jwt::algorithm::hs256{ " secret " });
verifier.verify(decoded_token);
أداة التحقق عديمة الحالة لذا يمكنك إعادة استخدامها لرموز مميزة مختلفة.
يعد إنشاء الرمز المميز أعلاه (والتوقيع عليه) بنفس السهولة.
auto token = jwt::create()
.set_type( " JWS " )
.set_issuer( " auth0 " )
.set_payload_claim( " sample " , jwt::claim(std::string( " test " )))
.sign(jwt::algorithm::hs256{ " secret " });
إذا كنت تتطلع إلى إصدار المزيد من الرموز الفريدة أو التحقق منها، فاطلع على الأمثلة التي تعمل مع مفاتيح RSA العامة والخاصة، ورموز المنحنى الإهليلجي، وغير ذلك الكثير!
البناء على هدف توفير المرونة.
يدعم jwt-cpp OpenSSL وLibreSSL وwolfSSL. للحصول على قائمة بالإصدارات التي تم اختبارها، راجع هذه الصفحة لمزيد من التفاصيل.
لا يوجد اعتماد صارم على مكتبة JSON محددة في هذا السياق. بدلاً من ذلك، يستخدم jwt-cpp jwt::basic_claim
عام تم تصميمه بناءً على سمة النوع. توفر هذه السمة أنواع JSON الدلالية للقيم والكائنات والمصفوفات والسلاسل والأرقام والأعداد الصحيحة والقيم المنطقية، بالإضافة إلى طرق للترجمة فيما بينها بسلاسة.
يوفر هذا التصميم المرونة في اختيار مكتبة JSON التي تناسب احتياجاتك. للاستفادة من إحدى سمات JSON المتوفرة، راجع docs/traits.md للحصول على إرشادات مفصلة.
jwt::basic_claim<my_favorite_json_library_traits> claim (json::object({{ " json " , true },{ " example " , 0 }}));
لمعرفة كيفية كتابة تنفيذ السمة، قم بمراجعة هذه التعليمات
فيما يتعلق بمواصفات base64 لـ JWTs، تتضمن هذه المكتبة base.h
التي تشمل جميع المتغيرات الضرورية. في حين أن المكتبة نفسها تقدم تطبيق Base64 بكفاءة، فمن الجدير بالذكر أن تطبيقات Base64 متاحة على نطاق واسع، وتظهر مستويات أداء متنوعة. إذا كنت تفضل استخدام تطبيق base64 الخاص بك، فلديك خيار تحديد JWT_DISABLE_BASE64
لاستبعاد تطبيق jwt-cpp.
إذا كانت لديك اقتراحات للتحسين أو إذا حددت خطأ ما، فيرجى عدم التردد في فتح مشكلة أو المساهمة عن طريق إنشاء طلب سحب. عند الإبلاغ عن خطأ ما، قم بتوفير تفاصيل شاملة حول بيئتك، بما في ذلك إصدار المترجم والمعلومات الأخرى ذات الصلة، لتسهيل إعادة إنتاج المشكلة. بالإضافة إلى ذلك، إذا كنت تقدم ميزة جديدة، فتأكد من تضمين حالات الاختبار المقابلة للتحقق من صحة وظائفها.
من أجل استخدام jwt-cpp تحتاج إلى الأدوات التالية.
من أجل بناء حالات الاختبار تحتاج أيضا
راجع الأسئلة الشائعة للحصول على النصائح.