1. 为什么需要JWT多应用认证
在开发对外API服务时,认证机制是保障系统安全的第一道防线。传统的Session认证方式在分布式系统中会遇到扩展性问题,而JWT(JSON Web Token)这种无状态的认证方案正好能解决这个痛点。我去年负责过一个电商平台的开放接口项目,当时就深刻体会到了JWT的价值。
JWT本质上是一个经过数字签名的JSON对象,由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。它的工作原理就像电影院的门票——购票时验明身份(认证),拿到票后(Token)在有效期内可以自由进出各个影厅(API接口),而无需每次都核对身份证(Session)。
对于多应用场景,比如我们同时为Web端、App和小程序提供服务,采用基于AppID/Key/Secret的三元组认证方案特别合适。这三个要素的关系可以类比为:
- AppID:相当于学生证号码(唯一标识)
- AppKey:相当于学生证上的二维码(公开标识)
- AppSecret:相当于身份证号码(绝密信息)
2. 快速集成JWT到SpringBoot
2.1 环境准备
首先在pom.xml中添加JJWT依赖。建议使用最新稳定版,我实测0.9.1版本在大多数场景下表现稳定:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.2 核心工具类实现
TokenService是JWT操作的核心,这里分享几个我在实际项目中总结的最佳实践:
@Service
public class TokenService {
// 建议将过期时间配置在application.yml中
private static final long EXPIRATION_TIME = 3600*1000;
public String generateToken(String appId, String appKey, String appSecret) {
// 建议加入签发时间(iat)帮助排查问题
Map<String, Object> claims = new HashMap<>();
claims.put("appKey
2577


&spm=1001.2101.3001.11974&articleId=95017000&d=1&t=3&u=58806bc8e160447f9c008e3095735b58)

被折叠的 条评论
为什么被折叠?



