使用PowerShell通过GitHub Apps JWT获取安装令牌遇401未授权问题
排查GitHub App安装令牌401未授权错误(PowerShell环境)
核对JWT核心参数与算法
确认Generate-JWT-FromGithub函数使用RS256签名算法,GitHub仅支持该算法。同时检查JWT的有效期:exp声明必须是当前时间加不超过600秒(10分钟),超时或过期都会导致401。可以直接解码生成的JWT,验证iss字段是否与APP_ID完全一致,exp时间是否在有效范围内。检查PEM私钥的加载与格式
确保PEM文件无多余换行、空格,首尾的-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----完整无缺。PowerShell读取时用Get-Content -Raw命令,避免拆分文本导致私钥不完整,影响签名有效性。校验API请求头的正确性
Get-InstallationToken函数的请求头必须严格符合要求:$headers = @{ "Authorization" = "Bearer $generatedJwt" "Accept" = "application/vnd.github.v3+json" }注意
Bearer后必须有空格,且必须指定Accept头为GitHub v3版本格式,缺少或格式错误会触发认证失败。确认App安装的权限与关联关系
检查GitHub App的安装是否正确关联了目标组织/仓库,且App拥有足够的权限(比如至少配置read:org或对应仓库权限)。若权限有修改,需重新安装App以刷新权限配置。处理PowerShell的Base64编码问题
生成JWT的Base64部分必须是URL安全格式:把编码后的+替换为-,/替换为_,并去掉末尾的=。PowerShell默认Base64编码不满足该要求,需手动处理编码结果。
内容的提问来源于stack exchange,提问作者groundhogday
相关产品推荐
相关产品推荐

