# JWT认证策略
JWT认证策略是使用JSON Web Token(JWT)对API进行身份验证和权限控制。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。JWT认证策略通过JWT token对API进行身份验证和权限控制。
JWT认证策略的原理是:
1、通过插件配置JWT token读取位置,读取到JWT token。
2、用配置的密钥将JWT token解析为 JSON。
3、通过参数映射配置,将 JSON 中的 KEY 映射到配置的Header或Query中。
# 准备工作:
首先设置自己的密钥,及json,通过JWT工具类,将参数转换为token。
以下是测试jwt插件需要的数据,通过secretKey和testMap可以生成token:
通过调用TestController.java中的jwtTestModel.setToken(token)方法,获取token。
以下示例为获取token的代码示例,可供参考。 获取token的示例项目:gateway-test.zip,必填参数为map,securityKey。
@GetMapping("/getJwtTestModel")
@ApiOperation("返回jwt测试案例")
public JwtTestModel getJwtModel() {
JwtTestModel jwtTestModel = new JwtTestModel();
final String secreteKey = "libq001-test-jwt001-test-jwt001-test";
Map<String, String> map = new HashMap<>();
map.put("id", "1");
map.put("name", "xiaoming");
String token = Jwts.builder()
.setClaims(map)
.signWith(Keys.hmacShaKeyFor(secreteKey.getBytes(StandardCharsets.UTF_8)), SignatureAlgorithm.HS256)
.compact();
jwtTestModel.setSecretKey(secreteKey);
jwtTestModel.setToken(token);
jwtTestModel.setTestMap(map);
return jwtTestModel;
}
响应结果json
{
"secretKey": "libq001-test-jwt001-test-jwt001-test",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoieGlhb21pbmciLCJpZCI6IjEifQ.svOnIomxEyhLWpTp31zYK56BHgGHy8ewqdCYtUs2ue4",
"testMap": {
"name": "xiaoming",
"id": "1"
}
}
新建JWT认证策略
添加策略到API接口,在"API测试"中,请求header中添加策略里的key和token值 ,查看调用结果:
如果没有配置请求头,或请求头key或value填错,则返回策略认证异常信息
开启映射后,调用示例接口,可查看映射效果:
查看query参数映射查看header参数映射: