使用OAUauthentication设置私有docker注册表(每个用户具有特定的命名空间)

时间:2016-08-09 08:13:52

标签: authentication docker oauth-2.0 docker-registry

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

到目前为止,我的调查指出了一个包含以下模块的设置

  • docker registry(当然)
  • Oauth2身份验证模块,具有每个用户的范围
  • 在注册表config.yml文件
  • 上设置oauth

这种设置是否可行?如何配置docker注册表以使用OAuth2服务器?我从官方文档中找到了以下资源:

https://docs.docker.com/registry/spec/auth/token/

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

this

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

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

http://localhost:8200/

似乎QAuth2的所有流程都没有后跟docker,我注意到它发送了一个GET(这是不允许的,但我有点破解它通过)请求,使用以下格式:

$> docker login -u admin -p admin  https://localhost:5000

登录名和密码位于授权标题中,Oauth2服务器成功进行基本身份验证,但是它错过了grant_type,用户名,密码流密码等。

我做错了什么?

据我所知,密码流的正确OAuth2令牌请求具有以下形式:

/oauth/token?account=admin&client_id=docker&offline_token=true&service=Docker+Registry

(在Authorization标头中的地方是clien_id:client_secret,在我的案例中,在docker:docker中允许在base64中执行特定的密码流)

OAuth2和docker是否有任何工作示例?我找到了以下示例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==" ,但这是一个基于docker documentation的自定义OAuth2类似JWT的实现(如果我错了,请更正)。

0 个答案:

没有答案