php エディターの Banana さんは、JWT (JSON Web Token) を使用する場合、その有効性を主張できず、信頼すべきではないことに注意する必要があると指摘しました。 JWT は認証や認可に使用されるトークンですが、自己完結型であるため、一度改ざんされると正当性が保証されません。したがって、JWT を使用する場合は、セキュリティ リスクを回避するために、署名や有効期限などの検証を含む厳格な検証措置を講じ、機密情報を JWT に保存しないようにする必要があります。
私の jwtutil.java コード:
リーリー問題は次のとおりです:
@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); } } }
関数 getsigningkey()
は jwts.sig.hs512.key().build();
を使用し、それぞれ新しいキーは呼び出されるたびに作成されます。
ただし、トークンに署名してトークンを検証するときは、getsigningkey()
を呼び出すため、両方の場合で異なるキーが得られます。
代わりに、キーを作成して保存し、保存されたキーを使用します。例えば:### リーリー
ただし、キーの作成はトークンが作成されるたびに行われるのではなく、トークンとは切り離される必要があります。プログラムを再起動した後も同じキーを使用できるように、キーを保持することも検討する必要があります。そうしないと、再起動後に発行されたすべてのトークンが無効になります。検証とは、トークンの署名を署名に使用したのと同じ鍵に対して検証することを意味します。
以上がエラーが発生しました。 JWT の有効性を主張できないため、信頼すべきではありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。