ไลบรารีส่วนหัวเท่านั้นสำหรับการสร้างและตรวจสอบ JSON Web Tokens ใน C ++ 11 สำหรับการแนะนำที่ดี โปรดอ่านสิ่งนี้
วัตถุประสงค์คือเพื่อส่งมอบคอลเลกชันอัลกอริธึม คลาส และโครงสร้างข้อมูลที่หลากหลายและใช้งานได้ในระดับสากล ส่งเสริมความสามารถในการปรับตัวและการบูรณาการอย่างราบรื่นกับไลบรารีอื่นๆ ที่คุณอาจใช้งานอยู่แล้ว
jwt-cpp รองรับอัลกอริธึมทั้งหมดที่ระบุไว้ในมาตรฐานอย่างครอบคลุม การออกแบบแบบแยกส่วนช่วยให้การรวมอัลกอริธึมเพิ่มเติมได้อย่างราบรื่นโดยไม่เกิดความยุ่งยากใดๆ หากคุณต้องการสนับสนุนอัลกอริธึมใหม่ โปรดอย่าลังเลที่จะเริ่มดึงคำขอหรือเปิดปัญหา
เพื่อความครบถ้วน นี่คือรายการอัลกอริธึมที่รองรับทั้งหมด:
ฮสม | อาร์เอสเอ | อีซีดีเอสเอ | ป.ล | เอ็ดดีเอสเอ |
---|---|---|---|---|
HS256 | RS256 | อีเอส256 | PS256 | เอ็ด25519 |
HS384 | RS384 | อีเอส384 | พีเอส384 | เอ็ด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;
}
คุณสามารถสร้างและรันตัวอย่างนี้ในเครื่องได้หลังจากการโคลนที่เก็บ เมื่อรันคำสั่งบางคำสั่ง เราจะเห็นเนื้อหาของ payload ของ 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 สำหรับ JWT ไลบรารีนี้มี base.h
ครอบคลุมตัวแปรที่จำเป็นทั้งหมด แม้ว่าตัวไลบรารีเองจะนำเสนอการใช้งาน base64 ที่เชี่ยวชาญ แต่ก็น่าสังเกตว่าการใช้งาน base64 นั้นมีอยู่อย่างกว้างขวาง โดยแสดงระดับประสิทธิภาพที่หลากหลาย หากคุณต้องการใช้การใช้งาน base64 ของคุณเอง คุณมีตัวเลือกในการกำหนด JWT_DISABLE_BASE64
เพื่อแยกการใช้งาน jwt-cpp
หากคุณมีข้อเสนอแนะสำหรับการปรับปรุงหรือหากคุณพบข้อบกพร่อง โปรดอย่าลังเลที่จะเปิดปัญหาหรือมีส่วนร่วมโดยสร้างคำขอดึงข้อมูล เมื่อรายงานจุดบกพร่อง ให้ระบุรายละเอียดที่ครอบคลุมเกี่ยวกับสภาพแวดล้อมของคุณ รวมถึงเวอร์ชันของคอมไพเลอร์และข้อมูลอื่นๆ ที่เกี่ยวข้อง เพื่ออำนวยความสะดวกในการเกิดปัญหาซ้ำ นอกจากนี้ หากคุณกำลังเปิดตัวคุณลักษณะใหม่ ตรวจสอบให้แน่ใจว่าคุณได้รวมกรณีทดสอบที่เกี่ยวข้องเพื่อตรวจสอบฟังก์ชันการทำงาน
ในการใช้ jwt-cpp คุณต้องมีเครื่องมือดังต่อไปนี้
ในการสร้างกรณีทดสอบคุณต้องมีด้วย
ดูคำถามที่พบบ่อยสำหรับเคล็ดลับ