openam federation 的问题(使用 apacheds 作为数据存储)

Posted

技术标签:

【中文标题】openam federation 的问题(使用 apacheds 作为数据存储)【英文标题】:Issues with openam federation (with apacheds as data store) 【发布时间】:2012-10-20 14:22:54 【问题描述】:

请帮我解决这个问题: 我正在尝试在 openam 中设置一个 idp 和一个 sp 的联盟。正在使用的数据存储是 ApacheDS。 我正在尝试按照以下教程进行相同的操作。

http://fczaja.blogspot.com/2012/06/idp-initiated-sso-and-identity.html

我在测试联合连接期间的 openam 日志中收到以下错误(来自控制台)**

libSAML2:10/30/2012 06:48:41:399 PM IST: Thread[http-8080-1,5,main]
AccountUtils.setAccountFederation:  set fedinfo sun-fm-saml2-nameid-info=[http://www.idp.com:8080/openam_10.0.0|http://www.sp.com:8090/openam_10.0.0|WC++1dcclPD//rTlgpYLD0EEISg2|http://www.idp.com:8080/openam_10.0.0|urn:oasis:names:tc:SAML:2.0:nameid-format:persistent|null|http://www.sp.com:8090/openam_10.0.0|IDPRole|false], sun-fm-saml2-nameid-infokey=[http://www.idp.com:8080/openam_10.0.0|http://www.sp.com:8090/openam_10.0.0|WC++1dcclPD//rTlgpYLD0EEISg2] userID = id=appu,ou=user,dc=opensso,dc=java,dc=net
libPlugins:10/30/2012 06:48:41:543 PM IST: Thread[http-8080-1,5,main]
ERROR: IdRepoDataStoreProvider.setAttribute(): IdRepo exception
Message:Plug-in com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo encountered an ldap exception.  LDAP Error 16: The specified attribute could not be found.
                        at com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo.handleLDAPException(LDAPv3Repo.java:6117)
                        at com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo.setAttributes(LDAPv3Repo.java:4141)
                        at com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo.setAttributes(LDAPv3Repo.java:3921)
                        at com.sun.identity.idm.server.IdServicesImpl.setAttributes(IdServicesImpl.java:1701)

这可能意味着 openam 正在尝试使用一些不存在的 LDAP 属性(因为我在 ApacheDS 中创建了最小属性集)。 所以我去了 IDP 和 SP 中的数据存储设置,并从 LDAP 用户属性中删除了不可用的属性。 现在它给出以下错误:

WARNING: IdServicesImpl.setAttributes: Unable to modify identity in the following repository com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo :: Illegal arguments: One or more required arguments is null or empty
amIdm:10/31/2012 10:20:26:362 AM IST: Thread[http-8080-1,5,main]
IdServicesImpl.setAttributes: Unable to set attributes in the following repository com.sun.identity.idm.plugins.internal.SpecialRepo :: Plug-in com.sun.identity.idm.plugins.internal.SpecialRepo does not support operation edit for type 2
amIdm:10/31/2012 10:20:26:362 AM IST: Thread[http-8080-1,5,main]
WARNING: IdServicesImpl.setAttributes: Unable to set attributes  for identity user::appu in any configured data store
Message:Illegal arguments: One or more required arguments is null or empty
                        at com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo.setAttributes(LDAPv3Repo.java:4039)
                        at com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo.setAttributes(LDAPv3Repo.java:3921)

一些论坛说 sun-fm-saml2-nameid-info 和 sun-fm-saml2-nameid-infokey 等属性是必需的。 但我无法将它们添加到我的数据存储中,因为它们与模式不匹配。此外,我无法将 openam 安装中给出的 LDIF 导入 Apache DS。 我有两个问题: 1. 我正朝着正确的方向前进(向 Apache ds 数据存储添加属性会有所帮助)?如果是,我如何在 Apache ds 中推送与 openam 相关的 schmea 项目? 2.有什么我完全想念的吗。

【问题讨论】:

无法获得解决方案,但可以运行联合。发生的事情是 openam 在链接帐户时尝试写入 LDAP 存储。 ApacheDS 未能做到这一点(原因不明)。但是,当我尝试在其位置使用 opendj 时,它能够轻松地将写入模式/条目读入 LDAP。因此,使用与fczaja.blogspot.com/2012/06/idp-initiated-sso-and-identity.html 中提到的相同的实现以及作为 OpenDJ 的 ldap 存储,联盟开始工作。 为什么它不能与 ApacheDS 一起工作是一个谜 :( 【参考方案1】:

根据 SAML NameID 格式,OpenAM 将尝试将联合信息保存在用户数据存储中。默认情况下,这些属性是“sun-fm-saml2-nameid-info”和“sun-fm-saml2-nameid-infokey”,但您可以在配置 -> 全局 -> 上将属性名称更改为您想要的任何名称SAMLv2 服务配置页面。

如果您的 SP 使用临时 NameID 格式,则不会保存此信息。

如果您的 SP 使用未指定的 NameID 格式,则在“断言内容”页面上的远程 SP 配置中,您可以使用名为“如果 NameID 格式未指定,则禁用联合持久性”的选项来禁用此数据存储更新。

在任何其他情况下,OpenAM 都会尝试在数据存储中保存/使用 Account Federation,这意味着它也会尝试更改/读取数据存储中的属性。如果您的数据存储无法识别这些属性,那么它将引发您提到的错误。此外,当您使用 OpenDJ 时,很可能会在此处加载 OpenAM 模式,因此可以保存属性。

在 OpenAM 10.1.0 中,如果正在使用忽略的用户配置文件模式,将有一个禁用此更新的选项:https://bugster.forgerock.org/jira/browse/OPENAM-1427。

所以你目前的选择是:

如前所述将设置中的 NameID-Format 更改为瞬态/未指定 将配置中的属性名更改为实际存在于 ApacheDS 架构中的属性

【讨论】:

谢谢彼得。 “如果未指定 NameID 格式,则禁用联合持久性”并没有以某种方式起作用。但是“将配置中的属性名更改为实际存在于您的 ApacheDS 架构中的属性”方法就像一个魅力:)。非常感谢您的帮助 只是想知道是否有现成的 ldif 可以导入到任何数据存储中,以便将 openam 特定属性名称添加到 apacheds 架构。 ApacheDS 没有 LDIF,但对于 OpenDJ/OpenDS、Active Directory、Tivoli Directory Server 等其他产品,您可以查看 'opendj_user_schema.ldif' 或 'ad_user_schema.ldif'。跨度> 感谢 Bernhard 提供的那条信息。感谢你们两位花时间解决我的问题。

以上是关于openam federation 的问题(使用 apacheds 作为数据存储)的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenAM/OpenSSO 身份验证后重新发布 HTML 表单

基于OpenAM系列的SSO----基础

Ajax 登录并以 json 格式获取数据 (OpenAM)

在 OpenAM 中定义参数化策略

OpenAM weblogic 策略代理安装

没有完全实施 OpenAM 或 OpenSSO 的 OpenAM 或 OpenSSO fedlets 作为 SP 和 ADFS 作为 IdP?