Java Json Web令牌颁发者验证不起作用
我正在用JWT做一些非常基本的事情-我正在遵循教程。我正在使用JWT库 代码是:Java Json Web令牌颁发者验证不起作用,java,jwt,Java,Jwt,我正在用JWT做一些非常基本的事情-我正在遵循教程。我正在使用JWT库 代码是: final Claims claims = new DefaultClaims() .setExpiration(new Date(LocalDateTime.now().plus(60, DAYS).toEpochSecond(UTC) * 1000)); Map<String, String> extraInfo = ImmutableMap.of("adm
final Claims claims = new DefaultClaims()
.setExpiration(new Date(LocalDateTime.now().plus(60, DAYS).toEpochSecond(UTC) * 1000));
Map<String, String> extraInfo = ImmutableMap.of("admin", "true");
claims.putAll(extraInfo);
String jwt = Jwts.builder().setIssuer("mycompany").setClaims(claims).signWith(HS512, secretKey).compact();
Jwts.parser()
.requireIssuer("mycompany")
.require("admin", "true")
.setSigningKey(secretKey)
.parseClaimsJws(jwt);
final Claims=new DefaultClaims()
.setExpiration(新日期(LocalDateTime.now().plus(60天).toepochs秒(UTC)*1000));
Map extraInfo=ImmutableMap.of(“admin”、“true”);
索赔。putAll(外部信息);
字符串jwt=Jwts.builder().setIssuer(“mycompany”).setClaims(claims).signWith(HS512,secretKey).compact();
解析器()
.重新发行人(“mycompany”)
.require(“管理”、“真实”)
.setSigningKey(加密键)
.parseClaimsJws(jwt);
不知何故,.requireIssuer(“mycompany”)
行导致丢失claimexception
错误预期iss声明为:mycompany,但在JWT声明中不存在。
如果我删除此检查,则检查
admin:true
即可。发卡机构的检查怎么可能失败?首先,不要在代码中直接使用DefaultClaims
。它来自于jjwt impl
工件,该工件应仅在运行时可用。引述:
除了JJWT impl.jar
之外,JJWT保证其所有工件的语义版本兼容性。对于jjwt impl.jar
没有这样的保证,并且.jar
的内部更改可以随时发生。切勿将jjwt impl.jar
添加到具有compile
作用域的项目中-始终使用runtime
作用域声明它
使用
Jwts.builder()
,您可以简单地执行以下操作:
请记住,我使用的是addClaims()
,而不是setClaims()
:
:将给定的声明添加到令牌中已经存在的声明中addClaims()
:将用给定的声明替换现有的声明setClaims()
setClaims
覆盖setissor
设置的声明。您可以通过在设置索赔后设置发卡机构来修复此问题
String jwt = Jwts.builder().setClaims(claims).setIssuer("mycompany").signWith(SignatureAlgorithm.HS512, secretKey).compact();
Map<String, Object> claims = ImmutableMap.of("admin", "true");
String jws = Jwts.builder()
.setIssuer("mycompany")
.setExpiration(Date.from(OffsetDateTime.now().plus(60, DAYS).toInstant()))
.addClaims(claims) // See the notes below
.signWith(key)
.compact();
Jws<Claims> jwsClaims = Jwts.parser()
.requireIssuer("mycompany")
.require("admin", "true")
.setSigningKey(key)
.parseClaimsJws(jws);
String jwt = Jwts.builder().setClaims(claims).setIssuer("mycompany").signWith(SignatureAlgorithm.HS512, secretKey).compact();