若要使 NuGet 成为包分发更安全的环境,可以通过添加范围来控制 API 密钥。
提供 API 密钥范围的功能可更好地控制 API。 您可以:
- 创建多个范围 API 密钥,这些密钥可用于具有不同过期时间范围的不同包。
- 安全地获取 API 密钥。
- 编辑现有 API 密钥以更改包适用性。
- 刷新或删除现有 API 密钥,而不会妨碍使用其他密钥的作。
为什么支持有范围的 API 密钥?
我们支持 API 密钥的范围,使你拥有更精细的权限。 以前,NuGet 为帐户提供了一个 API 密钥,并且这种方法有几个缺点:
- 用于控制所有包的一个 API 密钥。 使用用于管理所有包的单个 API 密钥,当多个开发人员参与不同的包以及共享发布者帐户时,很难安全地共享密钥。
- 所有权限或无。 任何有权访问 API 密钥的人都可以对包执行所有操作(发布、推送和取消列出)。 这在具有多个团队的环境中通常不理想。
- 单一故障点。 单个 API 密钥也意味着单个故障点。 如果密钥遭到入侵,则与该帐户关联的所有包可能会遭到入侵。 刷新 API 密钥是修复漏洞并避免 CI/CD 工作流中断的唯一方法。 此外,在某些情况下,你可能想要撤销对个人 API 密钥的访问权限(例如,当员工离开组织时)。 目前没有一种明确的方法来解决这个问题。
使用限定范围的 API 密钥,我们尝试解决这些问题,同时确保现有工作流均不会中断。
获取 API 密钥
登录到 nuget.org 帐户 ,或者创建一 个 帐户(如果还没有帐户)。
选择右上角的用户名,然后选择 API 密钥。
选择“ 创建”,并提供密钥的名称。
在选择范围中,选择推送。
在“选择包”>Glob 模式下,输入*。
选择 创建。
选择 “复制” 以复制新密钥。
重要
- 始终将 API 密钥保留为机密。 API 密钥类似于密码,允许任何人代表你管理包。 如果 API 密钥意外泄露,请将其删除或重新生成。
- 将密钥保存在安全的位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以复制密钥。 如果不再需要推送包,还可以删除 API 密钥。
作用域定义允许你为不同的用途创建独立的 API 密钥。 每个密钥都有到期时间范围,可以将密钥范围限定为特定包或 glob 模式。 还可以将每个密钥限定为特定操作:推送新包和包版本、仅推送新的包版本,或取消列出。
通过范围,可以为管理组织包的不同人员创建 API 密钥,以便他们仅具有所需的权限。
创建范围限定的 API 密钥
可以根据要求创建多个 API 密钥。 API 密钥可以应用于一个或多个包,具有授予特定权限的不同范围,并具有与之关联的到期日期。
在以下示例中,你有一个 API 密钥, Contoso service CI 该密钥可用于推送特定 Contoso.Service 包的包,有效期为 365 天。 这是一个典型的方案,即同一组织中的不同团队处理不同的包,并且团队的成员提供了仅为他们正在处理的包授予其特权的密钥。 过期用作防止过期或忘记密钥的机制。
使用 glob 模式
如果您正在处理多个包并且有大量的包需要管理,可以使用通配符模式来一起选择多个包。 例如,如果要向 ID 以Fabrikam.Service开头的所有包授予特定的作用域,可以通过在 fabrikam.service.*文本框中,通过指定来完成此操作。
使用 glob 模式确定 API 密钥权限也适用于与 glob 模式匹配的新包。 例如,如果尝试推送名为 Fabrikam.Service.Framework 的新包,则可以使用之前创建的密钥执行此作,因为包与 glob 模式 fabrikam.service.*匹配。
安全地获取 API 密钥
为了安全,新创建的密钥不会在屏幕上显示,且仅可通过使用复制按钮来获得。 同样,刷新页面后无法访问密钥。
编辑现有 API 密钥
你可能还需要在不更改密钥本身的情况下更新密钥权限和范围。 如果您有一个针对单个包的特定范围的密钥,可以选择将相同的范围应用于一个或多个其他包。
刷新或删除现有 API 密钥
帐户所有者可以选择刷新密钥,在这种情况下,权限(对包)、范围和到期时间保持不变,但会发出新密钥,使旧密钥不可用。 这有助于管理过时的密钥,或者存在 API 密钥泄漏的可能性。
如果不再需要这些密钥,还可以选择删除这些密钥。 删除密钥会删除密钥,并使密钥不可用。
FAQs
我的旧版 API 密钥会发生什么情况?
你的旧 API 密钥(旧版)仍然可以继续使用,并且可以一直使用下去,只要你希望它继续工作。 但是,如果这些密钥未使用超过 365 天来推送包,这些密钥将停用。 有关详细信息,请参阅博客文章 “更改即将过期的 API 密钥”。 无法再刷新此密钥。 需要删除旧密钥并改为创建新的作用域密钥。
注释
此密钥对所有包具有所有权限,并且永远不会过期。 应考虑删除此密钥,并创建具有作用域权限和明确到期的新密钥。
可以创建多少个 API 密钥?
可以创建的 API 密钥数没有限制。 建议您将其控制在可管理的数量,这样您最终不会导致许多过时的密钥,而无法知道这些密钥的使用者和使用地点。
是否可以删除旧版 API 密钥或立即停止使用?
是的。 建议您可以并且很有可能应该删除您的旧版 API 密钥。
是否可以返回错误删除的 API 密钥?
否。 删除后,只能创建新密钥。 意外删除的密钥无法恢复。
旧 API 密钥是否在 API 密钥刷新时继续工作?
否。 刷新密钥后,将生成一个新密钥,该密钥的范围、权限和到期时间与旧密钥相同。 旧密钥不再存在。
能否向现有 API 密钥授予更多权限?
不能修改范围,但可以编辑它适用的包列表。
如何知道我的密钥是否已过期或即将过期?
如果任何密钥过期,我们将通过页面顶部的警告消息告知你。 我们还在密钥到期前 10 天向帐户持有者发送警告电子邮件,以便你可以提前很好地处理它。