Keycloak自定义Docker ProtocolMapper部署

伊格格尔:

我正在尝试使用keycloak和集成的docker Registry v2 auth。一切都很好。但是,当前没有真正的授权层,并且查看github上的源代码,我可以看到有一个类AllowAllDockerProtocolMapper该类会自动将Docker注册表的所有权限授予已登录的用户。

我想实现一个基于名称空间的授权机制,即登录的用户仅在其自己的名称空间内(例如https://myregistry.local/username才具有推/拉权限

但是现在,我正在努力建立并运行一个简单的工作示例。我在https://www.keycloak.org/docs/latest/server_development/index.html#_providers上阅读了spi的密钥公开指南,并查看了github上的一些示例,但是现在似乎未选择已部署的模块通过钥匙斗篷。

我做了什么:

  • 创建的类UserNamespaceMapper扩展了DockerAuthV2ProtocolMapper并实现了DockerAuthV2AttributeMapper(我基本上从AllowAllDockerProtocolMapper复制了该示例

  • 在类路径上创建目录META-INF / services并将文件放置在其中名为org.keycloak.protocol.ProtocolMapper的文件中,文件包含我的UserNamespaceMapper的完全限定名称

  • 从我的源代码中创建一个jar docker-user-namespace-mapper.jar

  • 通过执行以下命令来创建模块:

    KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add --name=a.b.c.d.docker-user-namespace-mapper --resources=/build/libs/docker-user-namespace-mapper.jar --dependencies=org.keycloak:keycloak-services,org.keycloak.keycloak-server-spi-private,org.keycloak:keycloak-server-spi"

  • 修改了standalone.xml:

   <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
       <web-context>auth</web-context>
       <providers>
           <!-- THIS IS WHAT I ADDED -->
           <provider>module:a.b.c.d.docker-user-namespace-mapper</provider>
       </providers>
       ...
  • 重新启动密钥斗篷

当我转到Admin cli并尝试将新的映射器添加到docker-v2客户端时,新的映射器未显示,并且一切似乎与部署之前相同。在部署和服务器重新启动期间,不会引发任何错误。有人可以帮助我正确部署此docker映射器吗?

任何帮助深表感谢!

谢谢-伊万

伊格格尔:

我终于发现为什么它不起作用。

Keycloak未拾取该模块,因为我编辑的配置文件错误。不必将提供程序添加到中standalone.xml,而必须将其添加到中standalone-ha.xml这是因为我实际上使用了官方的Keycloak docker镜像jboss / keycloak,并查看了它们的启动脚本,docker-entrypoint.sh因此很明显standalone-ha.xml可以使用它。您可以在此处找到更多信息:使用Docker时,不会加载Keycloak SPI提供程序和层

如果有人对如何为DockerV2注册表实现/部署基于用户名称空间的自定义Keycloak映射器感兴趣:在此处查看我的代码:https//github.com/ieggel/DockerRegistryKeycloakUserNamespaceMapper

干杯!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章