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

如何用bash通过GitHub App的client_id和client_secret生成JWT令牌

GitHub App JWT 令牌生成指南

首先明确:GitHub App 用于自身API认证的JWT令牌不是通过client_id和client_secret生成的,而是需要使用你创建App时下载的RSA私钥文件(.pem格式)。client_id和client_secret主要用于OAuth授权流程,而非App自身的API身份验证。

一、准备必要信息

  • GitHub App ID:在GitHub App设置页面(Settings > Developer settings > GitHub Apps > 你的应用)可找到,是一串数字。
  • RSA私钥:创建App时下载的.pem文件,若丢失可在App设置页面重新生成并下载。

二、JWT生成核心规则

JWT由Header、Payload、Signature三部分组成:

  1. Header:固定指定算法为RS256
    {
      "alg": "RS256",
      "typ": "JWT"
    }
    
  2. Payload:必须包含三个字段
    • iat:当前时间戳(秒),即令牌签发时间
    • exp:过期时间戳(秒),GitHub要求最长不能超过签发时间后10分钟(600秒)
    • iss:你的GitHub App ID(数字)
  3. Signature:用RSA私钥对Header和Payload的Base64Url编码结果进行签名

三、生成方法示例

方法1:使用jwt-cli命令行工具

  1. 安装jwt-cli(例如通过Homebrew:brew install jwt-cli,或对应系统的包管理器)
  2. 执行以下命令,替换<APP_ID>为你的App ID,<PRIVATE_KEY_PATH>为私钥文件路径:
    jwt encode \
      --alg RS256 \
      --key @<PRIVATE_KEY_PATH> \
      --payload '{"iat":'$(date +%s)',"exp":'$(date -v+10M +%s)',"iss":<APP_ID>}'
    
    输出的字符串就是可用于API认证的JWT令牌。

方法2:Python代码生成

先安装依赖库:

pip install pyjwt cryptography

运行以下代码,替换<APP_ID>和<PRIVATE_KEY_PATH>:

import jwt
import time

app_id = <APP_ID>  # 替换为你的GitHub App ID
private_key_path = "<PRIVATE_KEY_PATH>"  # 替换为私钥文件路径

with open(private_key_path, "r") as f:
    private_key = f.read()

payload = {
    "iat": int(time.time()),
    "exp": int(time.time()) + 600,  # 10分钟过期,符合GitHub要求
    "iss": app_id
}

jwt_token = jwt.encode(payload, private_key, algorithm="RS256")
print(jwt_token)

方法3:在线JWT生成工具

  1. 打开在线JWT生成工具(如jwt.io)
  2. 在Header区域选择RS256算法
  3. 在Payload区域填入符合规则的JSON内容,示例:
    {
      "iat": 1718000000,  # 替换为当前时间戳(可通过在线时间戳工具获取)
      "exp": 1718000600,  # 当前时间戳+600
      "iss": 123456  # 替换为你的App ID
    }
    
  4. 在签名验证区域粘贴你的RSA私钥内容
  5. 页面顶部生成的字符串即为可用的JWT令牌

四、验证令牌有效性

使用你提供的curl命令测试,替换YOUR_JWT为生成的令牌:

curl --request GET \
--url "https://api.github.com/app" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR_JWT" \
--header "X-GitHub-Api-Version: 2022-11-28"

若返回你的GitHub App信息,则说明令牌有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:53:35