一、TokenJWT簡介
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TokenJWT {
// 生成Token
public static String createToken(String username, String secret, long ttlMillis) {
// 加密算法
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 當前時間戳
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// 計算過期時間
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
// JWT 的構建器
JwtBuilder builder = Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.signWith(signatureAlgorithm, secret)
.setExpiration(exp);
return builder.compact();
}
// 解析Token
public static Claims parseToken(String token, String secret) {
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}
}
TokenJWT是一個輕量級的Java庫,用於生成和解析JSON Web Token(JWT)。JWT是一種用於身份驗證和授權的開放標準(RFC 7519),定義了一種緊湊的、自包含的格式,可以傳輸數據,無需在數據之外再添加其他信息。使用JWT,可確保應用程序數據和用戶隱私得到根源級別的保護。TokenJWT庫實現了所有必要的功能,例如生成JWT、解析JWT、驗證JWT的簽名等等。
二、TokenJWT的生成
生成JWT至關重要,因為它是應用程序進行身份驗證和授權的核心。以下是使用TokenJWT生成JWT的簡單代碼示例。
public String generateToken(User user) {
// 將用戶名和密碼添加到聲明中,同時指定算法(HS256)和密鑰
return Jwts.builder()
.setSubject(user.getUserName())
.claim("roles", user.getRoles())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 1800000))
.signWith(SignatureAlgorithm.HS256, Constant.SECRET_KEY)
.compact();
}
在上面的代碼中,我們首先使用`Jwts.builder()`創建一個JWT生成器。然後,我們使用`setSubject()`方法將用戶名添加到聲明中,並使用`claim()`方法指定用戶角色信息。接下來,`setIssuedAt()`方法設置JWT的簽發時間,而`setExpiration()`方法設置JWT的過期時間。最後,我們使用`signWith()`方法指定算法(在這裡是HS256)和秘鑰,生成JWT。
三、TokenJWT的解析
一旦我們生成了JWT,我們需要對其進行解析以驗證是否有效。以下是使用TokenJWT解析JWT的示例代碼。
public Claims parseToken(String token) {
try {
Claims claims = Jwts.parser()
.setSigningKey(Constant.SECRET_KEY)
.parseClaimsJws(token).getBody();
return claims;
} catch (ExpiredJwtException | MalformedJwtException | SignatureException | UnsupportedJwtException | IllegalArgumentException e) {
throw new BadCredentialsException("INVALID_JWT_TOKEN", e);
}
}
在上面的代碼中,我們首先使用`Jwts.parser()`創建一個JWT解析器。然後,我們使用`setSigningKey()`方法指定算法(在這裡是HS256)和秘鑰。接下來,我們使用`parseClaimsJws()`方法對JWT進行解析,並使用`getBody()`方法獲取JWT的Payload。如果解析遇到任何錯誤,則會拋出相應的異常。
四、TokenJWT的保護
TokenJWT在許多方面都可以保護應用程序數據和用戶隱私:
1. 防止篡改
由於TokenJWT使用數字簽名對JWT進行加密,因此無法篡改。如果有人嘗試對JWT進行修改,則數字簽名將變得無效,無法進行身份驗證或授權。
2. 唯一標識
每個JWT都有唯一的ID(JTI),這是由JWT生成器設置的。用於標識該JWT,以防止重放攻擊。
3. 過期時間
每個JWT都有一個過期時間,這是由JWT生成器設置的。一旦JWT過期,它將無法再用於身份驗證或授權。
4. 合理選擇密鑰
在使用TokenJWT時,應謹慎選擇密鑰。如果密鑰太簡單,將會很容易被猜測;如果密鑰太複雜,則會增加延遲和資源消耗。因此,需要合理選擇密鑰。
五、總結
TokenJWT是一種可靠的身份驗證和授權工具,可以根源性地保護應用程序數據和用戶隱私。使用TokenJWT,可以輕鬆生成和解析JWT,並進行數字簽名,防止篡改,並提供唯一標識和過期時間功能。選擇一個恰當的密鑰也很重要。希望本文能夠幫助您更好地了解TokenJWT的使用和保護方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/194138.html