Mình đang code về jwt, đang muốn access token và refresh token, mỗi cái một thuật toán khác nhau như này:
public static final String SECRET = "7134743777217A24432646294A404E635266556A586E3272357538782F413F44";
public static final Integer EXPIRE_DURATION = 1000 * 60 * 1; // 1 minutes
public static final Integer TOKEN_LIFETIME = 1000 * 60 * 1; // 1 minutes
// defaut header
private JwsHeader getHeader() {
JwsHeader header = new DefaultJwsHeader();
header.setType("JWT");
header.setAlgorithm("HS256");
return header;
}
// refresh header
private JwsHeader getHeaderRefresh() {
JwsHeader header = new DefaultJwsHeader();
header.setType("JWT");
header.setAlgorithm("RS256");
return header;
}
// signature
public String generateToken(String username) {
log.info("generate jwt ...");
return createToken(getHeader(), setPayload(username));
}
public String generateRefreshToken(String username) {
log.info("generate refresh token ...");
return createToken(getHeaderRefresh(), setPayloadRefresh(username));
}
// payload
private Claims setPayload(String username) {
Claims claims = new DefaultClaims();
claims.setIssuer(username);
claims.setSubject(username);
claims.setIssuedAt(new Date(System.currentTimeMillis()));
claims.setExpiration(new Date(System.currentTimeMillis() + EXPIRE_DURATION));
return claims;
}
// payload refresh
private Claims setPayloadRefresh(String username) {
Claims claims = new DefaultClaims();
claims.setIssuer(username);
claims.setSubject(username);
claims.setIssuedAt(new Date(System.currentTimeMillis()));
claims.setExpiration(new Date(System.currentTimeMillis() + TOKEN_LIFETIME));
return claims;
}
private String createToken(JwsHeader header, Claims payload) {
System.out.println(header.hashCode());
return Jwts.builder()
.setHeader((Map<String, Object>)header) // header
.setClaims(payload) // payload
.signWith(getSignKey()).compact(); // signature (algo was set in header)
}
private Key getSignKey() {
byte [] keyByte = Decoders.BASE64.decode(SECRET);
return Keys.hmacShaKeyFor(keyByte);
}
nhưng không hiểu sao sau khi gọi hàm generateToken() và generateRefreshToken(), giá trị token lại giống hết nhau khi chạy, còn khi debug thì lại khác. Mình đã set thuật toán ở header cho mỗi loại rồi.
Ai biết giúp mình với.