范围内的 API 密钥

为了使 NuGet 成为一个更安全的包分发环境,可以通过添加范围来控制 API 密钥。

借助向 API 密钥提供范围的功能可更好地控制 API。 可以:

  • 创建多个范围内的 API 密钥,可用于具有不同到期时间表的不同包。
  • 安全地获取 API 密钥。
  • 编辑现有 API 密钥以更改包适用性。
  • 刷新或删除现有 API 密钥,而不会妨碍使用其他密钥的操作。

为什么我们支持范围内的 API 密钥?

我们支持 API 密钥的范围是为了让你拥有更细粒度的权限。 以前,NuGet 为一个帐户提供了一个 API 密钥,这种方法有几个缺点:

  • 一个 API 密钥控制所有包。 若使用一个 API 密钥管理所有包,当多个开发人员处理不同包以及共享发布者帐户时,很难安全地共享密钥。
  • 要么所有权限,要么无任何权限。 有权访问 API 密钥的任何人都拥有包的所有权限(发布、推送和取消列表)。 在具有多个团队的环境中,这通常是不可取的。
  • 单个故障点。 单个 API 密钥也意味着单个故障点。 如果密钥已泄露,则与该帐户有关的所有包都可能存在危险。 刷新 API 密钥是堵住漏洞,避免 CI/CD 工作流中断的唯一方法。 此外,在某些情况下,你可能希望撤销某个人对 API 密钥的访问权限(例如,当员工离开组织时)。 没有可以立即处理这种情况的有效方法。

使用范围内的 API 密钥,我们尝试解决这些问题,同时确保现有的工作流不会中断。

获取 API 密钥

  1. 登录你的 nuget.org 帐户,或创建一个帐户(如果你还没有帐户)。

  2. 选择右上角的用户名,然后选择“API 密钥”。

  3. 选择“创建”,为秘钥提供一个名称。

  4. 在“选择范围”下,选择“推送”。

  5. 在“选择包>”“Glob 模式”下,输入 *。

  6. 选择创建

  7. 选择“复制”以复制新秘钥。

    Screenshot that shows the new API key with the Copy link.

重要

  • 始终将 API 密钥保留为机密。 API 密钥就像一个密码,允许任何人代表你管理软件包。 如果 API 密钥意外显示,则删除或重新生成密钥。
  • 请将密钥保存在安全位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以对其进行复制。 如果你不再希望推送包,还可以删除 API 密钥。

设定范围允许创建针对不同用途的单独 API 密钥。 每个密钥都有过期时间,并且可以将秘钥范围限定为特定包(或 glob 模式)。 还可以将每个密钥限定为特定操作:推送新包和包版本、仅推送新包版本或取消列出。

通过范围限定,可以为管理组织不同包的不同人员创建 API 密钥,这样他们就只具有所需的权限。

创建范围内的 API 密钥

可以根据需要创建多个 API 密钥。 API 密钥可以应用于一个或多个包,具有授予特定权限的不同范围,并具有与之相关的到期日期。

在以下示例中,你有一个名为 Contoso service CI 的 API 密钥,可用于为特定 Contoso.Service 包推送包,并且有效期为 365 天。 这是一个典型的情况,即同一组织中的不同团队处理不同的包,并且团队成员获得的密钥仅向他们授予正在处理的包的权限。 到期用作一种防止密钥过时或遗忘的机制。

Create API keys

使用 glob 模式

如果处理多个包并且需要管理大量包,则可以选择使用通配模式同时选择多个包。 例如,如果希望为 ID 以 Fabrikam.Service 开头的所有包的键授予特定的范围,则可以在“Glob 模式”文本框中指定 fabrikam.service.*

Create API keys - 2

使用 glob 模式确定 API 密钥权限也适用于与 glob 模式匹配的新包。 例如,如果尝试推送名为 Fabrikam.Service.Framework 的新包,则可以使用之前创建的密钥执行此操作,因为该包与 glob 模式 fabrikam.service.* 匹配。

安全地获取 API 密钥

为了安全起见,屏幕上永远不会显示新创建的密钥,只能使用“复制”按钮。 同样,刷新页面后无法访问该密钥。

Create API keys - 3

编辑现有 API 密钥

你还可能希望在不更改密钥本身的情况下更新密钥权限和范围。 如果有一个针对单个包的具有特定范围的密钥,则可以选择向一个或多个其他包应用同一范围。

Create API keys - 4

刷新或删除现有 API 密钥

帐户所有者可以选择刷新密钥,在这种情况下(对包的)权限、范围和到期日期保持不变,但是会发出一个新密钥,使旧密钥无法使用。 这有助于管理过时密钥,或者有助于可能存在 API 密钥泄漏的情况。

Create API keys - 5

如果不再需要这些密钥,也可以选择删除这些密钥。 删除密钥将移除密钥并使其无法使用。

常见问题

我的旧(旧版)API 密钥会怎么样?

旧(旧版)API 密钥可继续使用,使用时间由你决定。 但是,如果这些密钥已超过 365 天未被用于推送包,则将停用。 有关详细信息,请参阅博客文章更改即将到期的 API 密钥。 无法再刷新此密钥。 需要删除旧密钥并改为创建新的范围内的密钥。

注意

此密钥具有所有包的所有权限,并且永不过期。 应该考虑删除此密钥并创建具有范围内权限和明确期限的新密钥。

我可以创建多少个 API 密钥?

可以创建的 API 密钥数量没有限制。 但我们建议保留易于管理的个数,这样你就不会获得许多过时密钥,而不知道密钥在何处以及谁在使用它们。

我是否可以删除旧 API 密钥或立即停止使用?

是的。 你可以并且应该删除你的旧 API 密钥。

我是否可以找回错误删除的 API 密钥?

否。 删除后,你只能创建新密钥。 意外删除的密钥无法恢复。

API 密钥刷新时是否可继续使用旧 API 密钥?

否。 刷新密钥后,将生成一个与旧密钥具有相同范围、权限和期限的新密钥。 旧密钥不复存在。

我可以为现有 API 密钥授予更多权限吗?

你无法修改范围,但可以编辑适用的包列表。

如何知道密钥是已过期还是即将过期?

如果任何密钥过期,我们会通过页面顶部的警告消息通知你。 我们还会在密钥到期前十天向帐户持有者发送警告电子邮件,以便能够提前做好准备。