Jatuh dalam kesilapan. Kesahan JWT tidak boleh ditegaskan dan tidak boleh dipercayai
editor php Banana menegaskan bahawa apabila menggunakan JWT (Token Web JSON), anda mesti ambil perhatian bahawa kesahihannya tidak boleh ditegaskan dan tidak boleh dipercayai. JWT ialah token yang digunakan untuk pengesahan dan kebenaran, tetapi disebabkan sifatnya yang serba lengkap, apabila token itu diganggu, kesahihannya tidak dapat dijamin. Oleh itu, apabila menggunakan JWT, kita harus mengambil langkah pengesahan yang ketat, termasuk mengesahkan tandatangan, masa tamat tempoh, dsb., dan tidak menyimpan maklumat sensitif dalam JWT untuk mengelakkan risiko keselamatan.
Kandungan soalan
Kod jwtutil.java saya:
@service @requiredargsconstructor public class jwtutil { private secretkey getsigningkey() { return jwts.sig.hs512.key().build(); } public string generatetoken(securitymember securitymember) { map<string, object> claims = new hashmap<>(); return createtoken(claims, securitymember.getusername()); } public string createtoken(map<string, object> claims, string subject) { return jwts.builder().claims(claims).subject(subject).issuedat(new date(system.currenttimemillis())) .expiration(new date(system.currenttimemillis() + 1000 * 60 * 60 * 10)) .signwith(getsigningkey()) .compact(); } public boolean validatetoken(string token, securitymember securitymember) { final string username = extractusername(token); return (username.equals(securitymember.getusername()) && !istokenexpired(token)); } private boolean istokenexpired(string token) { return extractexpiration(token).before(new date(system.currenttimemillis())); } public date extractexpiration(string token) { return extractclaims(token,claims::getexpiration); } public string extractusername(string token) { return extractclaims(token,claims::getsubject); } private <t> t extractclaims(string token, function<claims, t> claimsresolver) { final jwe<claims> claims = extractallclaims(token); return claimsresolver.apply(claims.getpayload()); } private jwe<claims> extractallclaims(string token) { try { return jwts.parser() .requireissuer("http://localhost:8080") .verifywith(getsigningkey()) .build() .parse(token).accept(jwe.claims); } catch (jwtexception ex) { throw new jwtexception("wrong jwt"+ex.getmessage(),ex); } } }
Soalannya ialah:
Caused by: io.jsonwebtoken.security.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
Penyelesaian
Fungsi anda getsigningkey()
使用 jwts.sig.hs512.key().build();
, yang akan mencipta kunci baharu setiap kali anda memanggilnya.
Tetapi anda menelefon getsigningkey()
apabila anda menandatangani token dan apabila anda mengesahkan token, jadi anda mempunyai kunci yang berbeza dalam kedua-dua kes.
Sebaliknya buat kunci dan simpan dan gunakan kunci yang disimpan. Contohnya:
signingKey = getSigningKey(); // use it for signing Jwts.builder().signWith(signingKey)... // and verification Jwts.parser().verifyWith(signingKey)...
Tetapi penciptaan kunci tidak sepatutnya berlaku setiap kali token dicipta, tetapi harus berasingan daripadanya. Anda juga harus mempertimbangkan untuk mengekalkan kunci supaya anda masih mempunyai kunci yang sama selepas memulakan semula program. Jika tidak, semua token yang dikeluarkan akan menjadi tidak sah selepas dimulakan semula.
Pengesahan bermakna anda mengesahkan tandatangan token terhadap kunci yang sama yang digunakan untuk menandatanganinya.
Atas ialah kandungan terperinci Jatuh dalam kesilapan. Kesahan JWT tidak boleh ditegaskan dan tidak boleh dipercayai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),
