令牌范围文档

预计阅读时间:6分钟

Docker Registry令牌范围和访问

注册中心使用的令牌始终受到限制,它们可以用于访问哪些资源,可以在哪里访问这些资源以及可以对这些资源执行哪些操作。令牌始终具有最初为其创建令牌的用户的上下文。本文档描述了授权服务器和资源提供者如何表示和实施这些限制。

范围组件

主题(授权用户)

主题代表令牌有效的用户。使用访问令牌执行的任何操作都应代表该主体。这包括在sub访问令牌JWT的字段中。刷新令牌应限于单个主题,并且只能发出该主题的访问令牌。

受众群体(资源提供者)

受众代表资源提供者,该资源提供者应能够执行访问令牌中指定的操作。与访问者不匹配的任何资源提供者都不应使用该访问令牌。受众包含在aud访问令牌JWT的字段中。刷新令牌应限于单个受众,并且只能为该受众发出访问令牌。

资源类型

资源类型表示资源名称旨在表示的资源类型。此类型可能特定于资源提供者,但必须由授权服务器理解,以验证主体是否被授权使用特定资源。

资源类别

资源类型可能具有资源类,该资源类进一步将资源名称分类为该资源类型。类不是必需的,并且特定于资源类型。

示例资源类型

  • repository-代表注册表中的单个存储库。存储库可以表示许多清单或内容Blob,但是资源类型被认为是这些项目的集合。可以在上执行的操作repositorypull用于访问集合并将push其添加到集合中。默认情况下,该repository类型具有的类image
  • repository(plugin)-表示注册表中插件的单个存储库。插件存储库具有与存储库相同的内容和操作。
  • registry-代表整个注册表。用于跨整个注册表的管理操作或查找操作。

资源名称

资源名称表示标识资源提供者的资源的名称。资源由该名称和提供的资源类型标识。资源名称的一个示例是图像标签的名称成分,例如“ samalba / myapp”或“ hostname / samalba / myapp”。

资源行动

资源动作定义访问令牌允许对标识的资源执行的动作。这些动作是特定于类型的,但通常将具有标识资源上的读写访问权的动作。该repository类型的示例用于pull读访问和push写访问。

授权服务器使用

每个访问令牌请求可以包括范围和受众。该主题始终从传入的凭据或刷新令牌派生。使用刷新令牌时,传入的受众必须与为刷新令牌定义的受众匹配。使用该service字段提供了受众(资源提供者) 。可以使用请求scope 上的多个字段来提供多个资源范围GET。该POST请求仅包含一个 scope字段,但可以使用空格来分隔多个资源范围的列表。

资源范围语法

scope                   := resourcescope [ ' ' resourcescope ]*
resourcescope           := resourcetype  ":" resourcename  ":" action [ ',' action ]*
resourcetype            := resourcetypevalue [ '(' resourcetypevalue ')' ]
resourcetypevalue       := /[a-z0-9]+/
resourcename            := [ hostname '/' ] component [ '/' component ]*
hostname                := hostcomponent ['.' hostcomponent]* [':' port-number]
hostcomponent           := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
port-number             := /[0-9]+/
action                  := /[a-z]*/
component               := alpha-numeric [ separator alpha-numeric ]*
alpha-numeric           := /[a-z0-9]+/
separator               := /[_.]|__|[-]*/

完整的参考语法在这里定义 。当前,作用域名称语法是参考语法的子集。

注:resourcename可含有一个:因的主机名的分量的可能的端口号resourcename,因此一个幼稚实现,它解释前三:的-delimited令牌 scoperesourcetyperesourcename,和的列表action 将是不充分的。

资源提供者使用

一旦资源提供者通过JWT访问令牌验证验证了范围的真实性,则资源提供者必须确保范围满足请求。资源提供者应根据资源提供者用来标识自身的名称或URI匹配给定的受众。在此未定义任何基于主题的拒绝,并且取决于资源提供者,该主题主要提供给审核日志以及可能需要提供但未由授权服务器定义的任何其他特定于用户的规则。

资源提供者必须确保由于请求而被访问的任何资源都具有适当的访问范围。资源类型和资源名称都必须与访问的资源匹配,并且必须包含适当的操作范围。

如果由于缺乏作用域或缺少令牌而没有提供适当的授权,则资源提供者将返回WWW-AUTHENTICATEHTTP标头,其中以realm作为授权服务器,service作为预期的受众标识字符串以及scope用于每个必需资源范围的字段来完成要求。

JWT访问令牌

每个JWT访问令牌只能具有一个主题和受众,但是具有多个资源范围。主题和受众被放入标准的JWT领域 subaud。资源范围已投入使用access。访问字段的结构可以在jwt文档中看到 。

刷新令牌

必须为单个主题和受众定义刷新令牌。应通过使用刷新令牌获取访问令牌来进一步将范围限制为特定类型,名称和操作组合。由于刷新令牌的范围不限于受众的特定资源,因此应格外小心,仅使用刷新令牌直接与授权服务器协商新的访问令牌,而不与资源提供者协商。

注册表本地图像标签存储库分发高级访问范围