Pustaka khusus header untuk membuat dan memvalidasi Token Web JSON di C++11. Untuk pengenalan yang bagus, baca ini.
Tujuannya adalah untuk memberikan kumpulan algoritme, kelas, dan struktur data yang serbaguna dan dapat diterapkan secara universal, mendorong kemampuan beradaptasi dan integrasi tanpa batas dengan perpustakaan lain yang mungkin sudah Anda gunakan.
jwt-cpp secara komprehensif mendukung semua algoritma yang ditentukan dalam standar. Desain modularnya memfasilitasi penyertaan algoritma tambahan tanpa menemui komplikasi apa pun. Jika Anda ingin menyumbangkan algoritma baru, silakan memulai permintaan penarikan atau membuka masalah.
Untuk kelengkapannya, berikut adalah daftar semua algoritma yang didukung:
HMSC | RSA | ECDSA | PSS | EdDSA |
---|---|---|---|---|
HS256 | RS256 | ES256 | PS256 | Ed25519 |
HS384 | RS384 | ES384 | PS384 | Ed448 |
HS512 | RS512 | ES512 | PS512 | |
ES256K |
Petunjuk instalasi dapat ditemukan di sini.
Contoh sederhananya adalah mendekode token dan mencetak semua klaimnya, mari (coba saja):
# 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;
}
Anda dapat membuat dan menjalankan contoh ini secara lokal setelah mengkloning repositori. Menjalankan beberapa perintah, kita dapat melihat isi payload JWT
cmake .
cmake --build . --target print-claims
./print-claims
# iss = "auth0"
# sample = "test"
Anda akan segera menyadari bahwa JWT tidak dienkripsi melainkan ditandatangani secara kriptografis untuk memberikan non-penyangkalan.
Untuk memverifikasi token, pertama-tama Anda membuat pemverifikasi dan menggunakannya untuk memverifikasi token yang didekodekan.
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);
Pemverifikasi tidak memiliki kewarganegaraan sehingga Anda dapat menggunakannya kembali untuk token yang berbeda.
Membuat token di atas (dan menandatanganinya) juga sama mudahnya.
auto token = jwt::create()
.set_type( " JWS " )
.set_issuer( " auth0 " )
.set_payload_claim( " sample " , jwt::claim(std::string( " test " )))
.sign(jwt::algorithm::hs256{ " secret " });
Jika Anda ingin menerbitkan atau memverifikasi token yang lebih unik, lihat contoh penggunaan kunci publik dan privat RSA, token kurva elips, dan banyak lagi!
Membangun tujuan memberikan fleksibilitas.
jwt-cpp mendukung OpenSSL, LibreSSL, dan wolfSSL. Untuk daftar versi yang diuji, periksa halaman ini untuk lebih jelasnya.
Tidak ada ketergantungan yang ketat pada perpustakaan JSON tertentu dalam konteks ini. Sebaliknya, jwt-cpp menggunakan jwt::basic_claim
generik yang dibuat berdasarkan sifat tipe. Sifat ini menyediakan tipe JSON semantik untuk nilai, objek, array, string, angka, bilangan bulat, dan boolean, beserta metode untuk menerjemahkannya dengan lancar.
Desain ini menawarkan fleksibilitas dalam memilih perpustakaan JSON yang paling sesuai dengan kebutuhan Anda. Untuk memanfaatkan salah satu ciri JSON yang disediakan, lihat docs/traits.md untuk panduan mendetail.
jwt::basic_claim<my_favorite_json_library_traits> claim (json::object({{ " json " , true },{ " example " , 0 }}));
Untuk mempelajari cara menulis implementasi suatu sifat, lihat petunjuk berikut
Berkenaan dengan spesifikasi base64 untuk JWT, perpustakaan ini menyertakan base.h
yang mencakup semua varian yang diperlukan. Meskipun perpustakaan itu sendiri menawarkan implementasi base64 yang mahir, perlu dicatat bahwa implementasi base64 tersedia secara luas, menunjukkan tingkat kinerja yang beragam. Jika Anda lebih suka menggunakan implementasi base64 Anda sendiri, Anda memiliki opsi untuk menentukan JWT_DISABLE_BASE64
untuk mengecualikan implementasi jwt-cpp.
Jika Anda memiliki saran untuk perbaikan atau jika Anda mengidentifikasi bug, jangan ragu untuk membuka masalah atau berkontribusi dengan membuat permintaan tarik. Saat melaporkan bug, berikan detail komprehensif tentang lingkungan Anda, termasuk versi compiler dan informasi relevan lainnya, untuk memfasilitasi reproduksi masalah. Selain itu, jika Anda memperkenalkan fitur baru, pastikan Anda menyertakan kasus pengujian yang sesuai untuk memvalidasi fungsinya.
Untuk menggunakan jwt-cpp Anda memerlukan alat berikut.
Untuk membangun kasus uji, Anda juga memerlukannya
Lihat FAQ untuk mendapatkan tip.