指定作用域的 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. 选择 “复制” 以复制新密钥。

    显示包含“复制”链接的新 API 密钥的屏幕截图。

重要

  • 始终将 API 密钥保留为机密。 API 密钥类似于密码,允许任何人代表你管理包。 如果 API 密钥意外泄露,请将其删除或重新生成。
  • 将密钥保存在安全的位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以复制密钥。 如果不再需要推送包,还可以删除 API 密钥。

作用域定义允许你为不同的用途创建独立的 API 密钥。 每个密钥都有到期时间范围,可以将密钥范围限定为特定包或 glob 模式。 还可以将每个密钥限定为特定操作:推送新包和包版本、仅推送新的包版本,或取消列出。

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

创建范围限定的 API 密钥

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

在以下示例中,你有一个 API 密钥, Contoso service CI 该密钥可用于推送特定 Contoso.Service 包的包,有效期为 365 天。 这是一个典型的方案,即同一组织中的不同团队处理不同的包,并且团队的成员提供了仅为他们正在处理的包授予其特权的密钥。 过期用作防止过期或忘记密钥的机制。

创建 API 密钥

使用 glob 模式

如果您正在处理多个包并且有大量的包需要管理,可以使用通配符模式来一起选择多个包。 例如,如果要向 ID 以Fabrikam.Service开头的所有包授予特定的作用域,可以通过在 fabrikam.service.*文本框中,通过指定来完成此操作。

创建 API 密钥 - 2

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

安全地获取 API 密钥

为了安全,新创建的密钥不会在屏幕上显示,且仅可通过使用复制按钮来获得。 同样,刷新页面后无法访问密钥。

创建 API 密钥 - 3

编辑现有 API 密钥

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

创建 API 密钥 - 4

刷新或删除现有 API 密钥

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

创建 API 密钥 - 5

如果不再需要这些密钥,还可以选择删除这些密钥。 删除密钥会删除密钥,并使密钥不可用。

FAQs

我的旧版 API 密钥会发生什么情况?

你的旧 API 密钥(旧版)仍然可以继续使用,并且可以一直使用下去,只要你希望它继续工作。 但是,如果这些密钥未使用超过 365 天来推送包,这些密钥将停用。 有关详细信息,请参阅博客文章 “更改即将过期的 API 密钥”。 无法再刷新此密钥。 需要删除旧密钥并改为创建新的作用域密钥。

注释

此密钥对所有包具有所有权限,并且永远不会过期。 应考虑删除此密钥,并创建具有作用域权限和明确到期的新密钥。

可以创建多少个 API 密钥?

可以创建的 API 密钥数没有限制。 建议您将其控制在可管理的数量,这样您最终不会导致许多过时的密钥,而无法知道这些密钥的使用者和使用地点。

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

是的。 建议您可以并且很有可能应该删除您的旧版 API 密钥。

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

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

旧 API 密钥是否在 API 密钥刷新时继续工作?

否。 刷新密钥后,将生成一个新密钥,该密钥的范围、权限和到期时间与旧密钥相同。 旧密钥不再存在。

能否向现有 API 密钥授予更多权限?

不能修改范围,但可以编辑它适用的包列表。

如何知道我的密钥是否已过期或即将过期?

如果任何密钥过期,我们将通过页面顶部的警告消息告知你。 我们还在密钥到期前 10 天向帐户持有者发送警告电子邮件,以便你可以提前很好地处理它。