跳至主要内容

确保您的 API 凭证安全

遵循这些最佳实践,以确保您的 API 凭证和令牌安全。

选择合适的身份验证方法

您应选择适合您想完成任务的身份验证方法。

  • 若要个人使用 API,您可以创建个人访问令牌。
  • 若要代表组织或其他用户使用 API,您应创建 GitHub App。
  • 在 GitHub Actions 工作流中使用 API 时,您应使用内置的 GITHUB_TOKEN 进行身份验证。

欲了解更多信息,请参阅 关于 GitHub 身份验证

限制凭证的权限

创建个人访问令牌时,仅选择所需的最小权限或范围,并将过期日期设置为您需要使用令牌的最短时间。GitHub 建议使用细粒度个人访问令牌,而非传统的个人访问令牌(Classic)。欲了解更多信息,请参阅 管理您的个人访问令牌

令牌具备其所有者拥有的访问资源和对资源执行操作的相同能力,并受令牌所授予的作用域或权限进一步限制。令牌不能为用户提供额外的访问能力。

创建 GitHub App 时,选择您的 GitHub App 所需的最小权限。欲了解更多信息,请参阅 创建 GitHub App 的最佳实践

在 GitHub Actions 工作流中使用 GITHUB_TOKEN 进行身份验证时,仅授予所需的最小权限。欲了解更多信息,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证

安全存储身份验证凭证

像对待密码或其他敏感凭证一样对待身份验证凭证。

  • 不要使用未加密的消息或电子邮件系统分享身份验证凭证。
  • 不要在命令行中以明文形式传递个人访问令牌。欲了解更多信息,请参阅 管理您的个人访问令牌
  • 不要将未加密的身份验证凭证(如令牌或密钥)推送到任何仓库,即使该仓库是私有的。请考虑使用 GitHub Actions secret 或 Codespaces secret。欲了解更多信息,请参阅 在 GitHub Actions 中使用 secret管理 GitHub Codespaces 的账户专属 secrets
  • 您可以使用 secret scanning 来发现已推送到仓库的令牌、私钥及其他机密,或阻止包含机密的后续推送。欲了解更多信息,请参阅 关于 secret scanning

限制谁可以访问您的身份验证凭证

不要与他人共享您的个人访问令牌。与其共享个人访问令牌,不如考虑创建 GitHub App。欲了解更多信息,请参阅 关于创建 GitHub App

如果需要与团队共享凭证,请将凭证存储在安全的共享系统中。例如,您可以使用 1Password 安全存储并共享密码,或将密钥存储在 Azure KeyVault 并通过您的 IAM(身份与访问管理)来管理访问权限。

如果您正在创建需要访问 API 的 GitHub Actions 工作流,可以将凭证存储在加密的 secret 中,并在工作流中访问该加密 secret。欲了解更多信息,请参阅 在 GitHub Actions 中使用 secret在 GitHub Actions 工作流中使用 GitHub App 进行已认证的 API 请求

在代码中安全使用身份验证凭证

永远不要在代码中硬编码身份验证凭证(如令牌、密钥或与应用相关的机密)。请考虑使用密钥管理器,例如 Azure Key VaultHashiCorp Vault。有关保护 GitHub App 凭证的更多信息,请参阅 创建 GitHub App 的最佳实践

如果您发现其他用户的个人访问令牌在 GitHub 或其他地方泄露,您可以通过 REST API 提交吊销请求。参见 吊销

在脚本中使用个人访问令牌时,建议将令牌存储为 GitHub Actions secret 并通过 GitHub Actions 运行脚本。您也可以将令牌存储为 Codespaces secret 并在 Codespaces 中运行脚本。欲了解更多信息,请参阅 在 GitHub Actions 中使用 secret管理 GitHub Codespaces 的账户专属 secrets

如果上述方式均不可行,您可以将身份验证凭证存放在 .env 文件中。请务必对 .env 文件进行加密,并且永远不要将其推送到任何仓库。

制定补救计划

您应制定计划,以及时处理任何安全漏洞。如果您的令牌或其他身份验证凭证泄露,您需要

  • 生成新的凭证。
  • 在所有存储或访问该凭证的地方,用新凭证替换旧凭证。
  • 删除已泄露的旧凭证。

有关轮换 GitHub App 被泄露凭证的信息,参见 创建 GitHub App 的最佳实践

有关创建和删除个人访问令牌的信息,请参阅 管理您的个人访问令牌

© . This site is unofficial and not affiliated with GitHub, Inc.