常见安全认证机制
- OAuth 2.0:一种授权框架,允许第三方应用以用户名义访问资源服务器。
- JSON Web Tokens (JWT):使用 JSON 格式在各方之间安全地传输信息。
- Basic Authentication:最简单的认证方式,客户端将用户名和密码以 Base64 编码发送到服务器。
在小型微服务项目中实现 JWT 认证机制
- 技术组件
- 编程语言及框架:如使用 Spring Boot(Java)、Node.js + Express 等。
- JWT 库:在 Java 中可使用 jjwt 库;Node.js 中可使用 jsonwebtoken 库。
- 基本流程
- 用户登录:用户在客户端输入用户名和密码,客户端将其发送到认证服务器。
- 验证:认证服务器验证用户名和密码。若正确,生成 JWT。例如在 Java Spring Boot 中:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "your-secret-key";
public static String generateToken(String username) {
Claims claims = Jwts.claims().setSubject(username);
claims.put("created", new Date());
return Jwts.builder()
.setClaims(claims)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 10 * 60 * 1000))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
}
- **返回 JWT**:认证服务器将生成的 JWT 返回给客户端。
- **后续请求**:客户端在后续请求头中带上 JWT,如 `Authorization: Bearer <token>`。微服务接收到请求后,使用 JWT 库验证 JWT 的有效性。例如在 Node.js Express 中:
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key';
function verifyToken(req, res, next) {
const token = req.headers['authorization'];
if (!token) return res.status(401).send('Access denied. No token provided.');
try {
const decoded = jwt.verify(token.split(' ')[1], SECRET_KEY);
req.user = decoded;
next();
} catch (err) {
res.status(400).send('Invalid token.');
}
}