Authentication 使用OAU身份验证设置私有docker注册表(每个用户具有特定的命名空间)

Authentication 使用OAU身份验证设置私有docker注册表(每个用户具有特定的命名空间),authentication,docker,oauth-2.0,docker-registry,Authentication,Docker,Oauth 2.0,Docker Registry,我的用例需要设置一个私有docker注册表,该注册表能够对用户进行特定名称空间的身份验证,同时防止已验证用户将图像拉/推到分配给他们的名称空间以外的其他名称空间 到目前为止,我的调查表明我使用了以下模块进行设置 码头工人登记处(当然) Oauth2身份验证模块,具有每个用户的作用域 在注册表文件上安装oauth 这种类型的设置是否可行?如何配置docker注册表以使用OAuth2服务器?我从官方文件中找到了以下资源: 在my config.yml中,我添加了以下行: auth: tok

我的用例需要设置一个私有docker注册表,该注册表能够对用户进行特定名称空间的身份验证,同时防止已验证用户将图像拉/推到分配给他们的名称空间以外的其他名称空间

到目前为止,我的调查表明我使用了以下模块进行设置

  • 码头工人登记处(当然)
  • Oauth2身份验证模块,具有每个用户的作用域
  • 在注册表文件上安装oauth
这种类型的设置是否可行?如何配置docker注册表以使用OAuth2服务器?我从官方文件中找到了以下资源:

在my config.yml中,我添加了以下行:

auth:
  token:
    realm: http://localhost:8200/oauth/token
    issuer: Auth Service
    service: Docker Registry
    rootcertbundle: /certs/server.crt
在位置
http://localhost:8200/
是我的QAuth2实现,它基于Spring OAuth2

当我尝试登录到我的注册表时

$> docker login -u admin -p admin  https://localhost:5000
似乎没有一个QAuth2流被docker跟踪,我注意到它发送了一个GET(这是不允许的,但我有点破解它来通过)请求,格式如下:

/oauth/token?account=admin&client_id=docker&offline_token=true&service=Docker+Registry
curl -X POST "localhost:8200/oauth/token" \ 
-d "username=admin&password=admin&grant_type=password&scope=read%20write&" \ 
-H "Content-Type: application/x-www-form-urlencoded" \ 
-H "Accept: application/json" \ 
-H "Authorization: Basic ZG9ja2VyOmRvY2tlcg=="
登录名和密码位于授权标头中,Oauth2服务器成功地执行了基本身份验证,但随后它错过了授权类型、用户名、密码流等

我做错了什么

据我所知,适当的OAuth2令牌请求(例如密码流)具有以下形式:

/oauth/token?account=admin&client_id=docker&offline_token=true&service=Docker+Registry
curl -X POST "localhost:8200/oauth/token" \ 
-d "username=admin&password=admin&grant_type=password&scope=read%20write&" \ 
-H "Content-Type: application/x-www-form-urlencoded" \ 
-H "Accept: application/json" \ 
-H "Authorization: Basic ZG9ja2VyOmRvY2tlcg=="
(其中授权头中是clien_id:client_secret,在我的例子中,它允许在base64中执行特定密码流docker:docker)


有OAuth2和docker的工作示例吗?我发现了以下示例
https://github.com/opendns/registry-oauth-server
但这是一个定制的类似OAuth2的JWT实现(如果我错了,请纠正我)。

2016年以来有什么新闻吗?