使用Python实现
- 安装依赖:
- 首先确保安装了
PyJWT
库,可使用pip install PyJWT
安装。
- 生成令牌:
import jwt
import datetime
# 密钥,需妥善保管
SECRET_KEY = "your_secret_key"
def generate_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes = 30) # 令牌过期时间
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
- 验证令牌签名:
def verify_token(token):
try:
data = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return data
except jwt.ExpiredSignatureError:
return None
except jwt.InvalidTokenError:
return None
使用Java实现
- 添加依赖:
- 在
pom.xml
中添加jjwt-api
和jjwt-impl
依赖。
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
- 生成令牌:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
public class JwtUtil {
private static final Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
private static final long EXPIRATION_TIME = 30 * 60 * 1000; // 30分钟
public static String generateToken(String userId) {
Date expiration = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
Claims claims = Jwts.claims().setSubject(userId);
claims.put("exp", expiration);
return Jwts.builder()
.setClaims(claims)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
}
- 验证令牌签名:
public static boolean verifyToken(String token) {
try {
Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
使用Node.js实现
- 安装依赖:
- 使用
npm install jsonwebtoken
安装jsonwebtoken
库。
- 生成令牌:
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your_secret_key';
function generateToken(userId) {
const payload = {
user_id: userId,
exp: Math.floor(Date.now() / 1000) + (30 * 60) // 30分钟过期
};
return jwt.sign(payload, SECRET_KEY, { algorithm: 'HS256' });
}
- 验证令牌签名:
function verifyToken(token) {
try {
const decoded = jwt.verify(token, SECRET_KEY);
return decoded;
} catch (err) {
return null;
}
}