Single sign on 有没有一种方法可以过滤/避免keydape SAML断言中的重复属性名?

Single sign on 有没有一种方法可以过滤/避免keydape SAML断言中的重复属性名?,single-sign-on,saml,keycloak,nextcloud,Single Sign On,Saml,Keycloak,Nextcloud,我正在尝试使用nextcloud(13.0.4)和KeyClope(4.0.0.Final)(作为SSO/SAML IDP和用户管理解决方案)设置SSO,如中所述 但是,尝试使用在KeyClope中配置的SSO测试用户登录到nextcloud时,nextcloud抱怨出现以下错误: OneLogin_Saml2_ValidationError: Found an Attribute element with duplicated Name /var/www/html/nextcloud/cus

我正在尝试使用nextcloud(13.0.4)和KeyClope(4.0.0.Final)(作为SSO/SAML IDP和用户管理解决方案)设置SSO,如中所述

但是,尝试使用在KeyClope中配置的SSO测试用户登录到nextcloud时,nextcloud抱怨出现以下错误:

OneLogin_Saml2_ValidationError: Found an Attribute element with duplicated Name

/var/www/html/nextcloud/custom_apps/user_saml/3rdparty/vendor/onelogin/php-saml/lib/Saml2/Auth.php - line 177: OneLogin_Saml2_Response->getAttributes()
/var/www/html/nextcloud/custom_apps/user_saml/lib/Controller/SAMLController.php - line 219: OneLogin_Saml2_Auth->processResponse('ONELOGIN_1111a8...')
[internal function] OCA\User_SAML\Controller\SAMLController->assertionConsumerService()
/var/www/html/nextcloud/lib/private/AppFramework/Http/Dispatcher.php - line 161: call_user_func_array(Array, Array)
/var/www/html/nextcloud/lib/private/AppFramework/Http/Dispatcher.php - line 91: OC\AppFramework\Http\Dispatcher->executeController(Object(OCA\User_SAML\Controller\SAMLController), 'assertionConsum...')
/var/www/html/nextcloud/lib/private/AppFramework/App.php - line 115: OC\AppFramework\Http\Dispatcher->dispatch(Object(OCA\User_SAML\Controller\SAMLController), 'assertionConsum...')
/var/www/html/nextcloud/lib/private/AppFramework/Routing/RouteActionHandler.php - line 47: OC\AppFramework\App main('OCA\\User_SAML\\C...', 'assertionConsum...', Object(OC\AppFramework\DependencyInjection\DIContainer), Array)
[internal function] OC\AppFramework\Routing\RouteActionHandler->__invoke(Array)
/var/www/html/nextcloud/lib/private/Route/Router.php - line 297: call_user_func(Object(OC\AppFramework\Routing\RouteActionHandler), Array)
/var/www/html/nextcloud/lib/base.php - line 999: OC\Route\Router->match('/apps/user_saml...')
/var/www/html/nextcloud/index.php - line 42: OC handleRequest()
{main}
enter
我想知道是否有一种方法可以避免/过滤keydape中重复的属性名,从而避免这个问题

我已经设置了一个test docker-compose.yml来显示问题(仅限localhost,不含https,即仅用于测试)


钥匙斗篷将在和下一次在。此文件也可以在上找到。在这里,您还可以了解docker映像的详细信息(它基于13.0-apache的官方nextcloud/docker映像)。

因为我也将此作为bug发布在,我现在知道了解决方案:您必须激活“单角色属性”开关

在KeyClope 4.0.0.Final中,该选项隐藏在以下位置:
(领域)->客户端范围->角色列表(saml)->映射器选项卡->角色列表->单个角色属性。

现在有一个更好的答案,发布在

瓦扎·阿里23天前发表了评论

我知道这一页很旧,但它是你绊倒的一页 在寻找这个问题的时候。有比这更好的选择 提议的那个!建议的选项会更改每个用户的角色列表 域内的客户端。最好覆盖上的设置 客户端级别,以确保它只影响Nextcloud客户端

为了这个。编辑您的客户端,转到客户端范围并删除角色列表 从指定的默认客户端范围

接下来,创建一个新的映射器以实际映射角色列表:

Name: anything you like
Mapper Type: Role List
Role Attribute name: Role
Friendly Name: Anything you like
SAML Attribute Name Format: Basic
Single Role Attribute: ON
希望这对别人有帮助


在我的示例中,我没有设置标识提供程序(idp)。所以我不知道你在那部分的配置是什么。另外,我很想知道你为什么要设置它(没有它,你的KeyClope+nextcloud可以正常运行)。请提供更多详细信息,说明如何设置KeyClope和nextcloud,以及为什么尝试使用idp。亲爱的MadMike,也许我的措辞有点模糊,因此我对我的问题进行了一些编辑。我实际做的是一步一步地遵循您的解决方案(我知道的唯一区别是我在nextcloud中使用了另一个docker映像)。但是,我总是会遇到上面提到的错误。您使用了什么来代替
domain.com
?您是否创建了多个用户?您是否直接在nextcloud上创建了用户?您使用哪种docker图像?说到这里。。。请张贴你的docker compose.yml。。。删除密码,保留其余密码。我在问题中添加了docker compose文件以显示问题(在本地主机上)。但我也尝试了一个真正的域(通过let's encrypt使用https),遇到了同样的问题。我不知道从哪里开始查找这种错误。我从来没有过这样的。也许会问?
Name: anything you like
Mapper Type: Role List
Role Attribute name: Role
Friendly Name: Anything you like
SAML Attribute Name Format: Basic
Single Role Attribute: ON