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); } } }
Solution
関数 getsigningkey()
は jwts.sig.hs512.key().build();
を使用し、それぞれ新しいキーは呼び出されるたびに作成されます。
ただし、トークンに署名してトークンを検証するときは、getsigningkey()
を呼び出すため、両方の場合で異なるキーが得られます。
代わりに、キーを作成して保存し、保存されたキーを使用します。例えば:### リーリー
ただし、キーの作成はトークンが作成されるたびに行われるのではなく、トークンとは切り離される必要があります。プログラムを再起動した後も同じキーを使用できるように、キーを保持することも検討する必要があります。そうしないと、再起動後に発行されたすべてのトークンが無効になります。検証とは、トークンの署名を署名に使用したのと同じ鍵に対して検証することを意味します。
以上がエラーが発生しました。 JWT の有効性を主張できないため、信頼すべきではありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









