修改代码,使得action token具有与已登录用户等同的权限,对其他公开仓库有只读权限 #59
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/actions_token_read_public_repos"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动文件:


api.go - API 请求的仓库权限分配
routers/web/repo/githttp.go - Git clone/fetch 操作的权限检查
services/lfs/server.go - LFS 大文件下载的认证检查
services/actions/modify_workflow.go 将action token塞到短链接里面
改动逻辑:
开放action token的权限等同于已登录用户,但只有只读权限,短链接action再自动把token塞进去
改动前:
改动后:
测试状态 ✅ 通过 (Passed)
@@ -130,0 +133,4 @@if strings.HasPrefix(baseURL, "http://") {authURL = strings.Replace(baseURL, "http://", fmt.Sprintf("http://x-access-token:%s@", token), 1)} else if strings.HasPrefix(baseURL, "https://") {authURL = strings.Replace(baseURL, "https://", fmt.Sprintf("https://x-access-token:%s@", token), 1)这种写法会在actions执行时暴露token吧?
{{ secrets.GITHUB_TOKEN }} 用它替代是不是更安全?
不会
Cloned http://x-access-token:***@172.24.161.175/actions/checkout to /root/.cache/act/f3146ca6e96b4234044f47c601b855d4df56f2d7bfdf59d7391b0e99db3e44a6
会变成这样,git有默认的脱敏处理
eb81995bcato53ff8f0112改动:
修改成转入secrets.GITHUB_TOKEN,使得runner自动替换
x-access-token实际上是作为用户名,这是一个约定俗成的特殊用户名,GitHub/Gitea 服务器看到这个用户名时,会知道密码字段传递的是一个 access token,而不是用户的真实密码。
其实大多数 Git 服务器(GitHub、Gitea)只验证密码字段的 token,用户名可以是任意值,用户名后面的token会默认脱敏
测试状态 ❌ 失败 (Failed)
测试状态 ❌ 失败 (Failed)