You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate API测试中生成RS256签名的JWT Token

在Karate Feature文件中生成RS256(SHA256-RSA)签名的JWT Token

Karate本身未内置RS256算法的JWT生成能力,需借助Java工具类或第三方JWT库实现,以下是具体方案:

1. 添加依赖(以Maven为例)

引入JJWT库处理JWT的生成与签名,在项目pom.xml中添加依赖:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>

2. 编写Java工具类

创建JwtUtils.java类,封装私钥加载和RS256 JWT生成逻辑:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.PrivateKey;
import java.util.Date;
import java.util.Map;

public class JwtUtils {
    // 从PEM格式字符串加载RSA私钥
    public static PrivateKey loadPrivateKey(String pemPrivateKey) {
        return Keys.privateKeyFromPem(pemPrivateKey);
    }

    // 生成RS256签名的JWT
    public static String generateRS256Jwt(Map<String, Object> claims, String subject, long expirationMillis, PrivateKey privateKey) {
        long now = System.currentTimeMillis();
        return Jwts.builder()
                .setClaims(claims)
                .setSubject(subject)
                .setIssuedAt(new Date(now))
                .setExpiration(new Date(now + expirationMillis))
                .signWith(privateKey, SignatureAlgorithm.RS256)
                .compact();
    }
}

3. 在Karate Feature文件中调用

在Feature文件中加载工具类、私钥,生成并使用JWT:

Feature: 生成RS256签名JWT并调用接口

Background:
    # 加载RSA私钥(建议从配置文件/环境变量读取,此处为示例硬编码)
    * def privateKeyPem = """
      -----BEGIN PRIVATE KEY-----
      你的RSA私钥完整内容
      -----END PRIVATE KEY-----
      """
    # 引入Java工具类
    * def JwtUtils = Java.type('com.your.package.JwtUtils')
    # 初始化私钥对象
    * def privateKey = JwtUtils.loadPrivateKey(privateKeyPem)

Scenario: 生成Token并发起认证请求
    # 定义JWT自定义Claims
    * def jwtClaims = { role: 'admin', issuer: 'your-service' }
    # 生成Token,设置1小时有效期
    * def rs256Token = JwtUtils.generateRS256Jwt(jwtClaims, 'user_001', 3600000, privateKey)
    * print '生成的RS256 JWT:', rs256Token

    # 在请求中携带Token
    Given url 'https://your-api-domain.com/protected/resource'
    And header Authorization = 'Bearer ' + rs256Token
    When method get
    Then status 200

注意事项

  • 私钥需为PEM格式的RSA私钥,确保格式完整(包含首尾标记)。
  • 避免硬编码私钥,可通过Karate配置文件或环境变量动态加载,保障安全。

内容的提问来源于stack exchange,提问作者Holger Joukl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:09:18