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

寻求Python+libsodium加密Token并更新GitHub Secret的实现方案

解决GitHub Actions中加密Access Token并更新Secret的问题

问题场景

需要通过GitHub Actions自动刷新OAuth Access Token,并将新Token加密后更新到GitHub Secrets中,但缺少基于libsodium的Python加密实现,现有Node.js参考示例,需适配Python环境。

解决方案

1. Python加密脚本(secret_encryptor.py)

创建该脚本用于读取环境变量中的新Token和GitHub公钥,完成加密后输出Base64编码的加密结果:

import os
import base64
from nacl import crypto

def main():
    # 从环境变量获取新Token和GitHub公钥
    new_access_token = os.environ.get("NEW_ACCESS_TOKEN")
    github_public_key_base64 = os.environ.get("PUBLIC_KEY")

    if not new_access_token or not github_public_key_base64:
        raise ValueError("缺少必要的环境变量:NEW_ACCESS_TOKEN 或 PUBLIC_KEY")

    # 解码Base64格式的公钥
    public_key_bytes = base64.b64decode(github_public_key_base64)
    public_key = crypto.public.PublicKey(public_key_bytes)

    # 使用SealedBox加密Token(符合GitHub要求的RSA-OAEP-SHA1标准)
    encrypted_token = crypto.public.SealedBox(public_key).encrypt(new_access_token.encode("utf-8"))

    # 将加密结果转为Base64字符串输出
    print(base64.b64encode(encrypted_token).decode("utf-8"))

if __name__ == "__main__":
    main()

2. Workflow配套说明

  • 你的现有Workflow无需修改encrypt_access_token步骤,脚本会自动读取已注入的NEW_ACCESS_TOKEN和PUBLIC_KEY环境变量
  • 确认GH_PAT权限:针对仓库Secret需repo权限,针对组织Secret需admin:org权限
  • 确保自托管runner中已安装jq工具(用于解析API返回的JSON数据)

加密逻辑说明

GitHub要求Secret加密采用RSA-OAEP-SHA1算法,pynacl库的SealedBox模块原生支持该标准,通过公钥加密后,只有GitHub对应的私钥才能解密,保证Token传输和存储的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:02:45