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

使用Quarkus&Smallrye JWT生成GitHub App认证JWT失败求助

解决Quarkus中GitHub App JWT签名密钥错误问题

针对你遇到的SRJWT05028: Signing key can not be created from the loaded content错误,以下是排查和解决步骤:

1. 检查私钥文件有效性

GitHub App生成的私钥必须是完整的RSA格式,确保privateKey.pem包含首尾标记且无格式错误:

-----BEGIN RSA PRIVATE KEY-----
# 密钥内容(无多余空格/换行)
-----END RSA PRIVATE KEY-----

如果私钥是从GitHub下载的,不要修改内容,直接放入src/main/resources目录。若文件损坏,重新从GitHub App设置页面生成并下载私钥。

2. 验证配置路径与文件读取

  • 确认privateKey.pem在src/main/resources根目录下,若放在子文件夹,需修改配置路径为相对路径(如keys/privateKey.pem)。
  • 可临时使用绝对路径测试配置,确认文件能被读取:
    smallrye.jwt.sign.key.location=file:/your/project/path/src/main/resources/privateKey.pem
    

3. 确认依赖配置正确

确保项目引入了正确的Quarkus SmallRye JWT Build依赖:

Maven

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-jwt-build</artifactId>
</dependency>

Gradle

implementation 'io.quarkus:quarkus-smallrye-jwt-build'

依赖版本需与Quarkus主版本一致,避免版本冲突。

4. 手动加载私钥调试

若自动加载失败,尝试手动读取私钥以定位问题,修改TokenManager:

@RequestScoped
public class TokenManager {

    @Inject
    @ConfigProperty(name = "smallrye.jwt.sign.key.location")
    String keyLocation;

    public String getJwt() throws Exception {
        InputStream keyStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(keyLocation);
        if (keyStream == null) {
            throw new IllegalArgumentException("私钥文件未找到");
        }

        byte[] keyBytes = keyStream.readAllBytes();
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

        return Jwt
                .issuer("你的GitHub App数字ID") // 注意:这里必须是App的数字ID,不是URL
                .issuedAt(Instant.now())
                .expiresAt(Instant.now().plusMillis(600000))
                .sign(privateKey);
    }
}

如果手动加载时报错,说明私钥格式或文件路径存在问题;若成功,则检查自动加载的配置是否有遗漏。

5. 修正GitHub JWT Issuer字段

注意:GitHub App要求JWT的iss字段是你的App的数字ID(可在GitHub App设置页面找到),而非https://github.com/apps/appname,这个错误虽不直接导致当前密钥错误,但会导致后续GitHub API认证失败,必须修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:35:19