php 편집자 Banana는 JWT(JSON 웹 토큰)를 사용할 때 그 유효성을 주장할 수 없으며 신뢰할 수 없다는 점에 유의해야 한다고 지적했습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!