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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
