我正在尝试使用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] 删除。
我来说两句