首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带LDAP身份验证的Karaf

带LDAP身份验证的Karaf
EN

Stack Overflow用户
提问于 2017-08-01 06:13:59
回答 1查看 741关注 0票数 1

我正在尝试设置karaf (4.0.9)通过ldap/active directory对用户进行身份验证/授权。

我已经将以下ldap-module.xml复制到每个https://karaf.apache.org/manual/latest/#_available_realm_and_login_modules的部署目录中

代码语言:javascript
复制
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <jaas:config name="karaf" rank="1">
    <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="sufficient">
      initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
      connection.username=cn=ldapsearch,cn=users,dc=eng,dc=net
      connection.password=****
      connection.protocol=
      connection.url=ldap://server:389
      user.base.dn=dc=eng,dc=net
      user.filter=(samaccountname=%u)
      user.search.subtree=true
      user.debug=true
      role.base.dn=dc=eng,dc=net
      role.name.attribute=cn
      role.filter=(member=%fqdn)
      role.search.subtree=true
      role.mapping=jtAdmins=admin,user,operator
      authentication=simple
      debug=true
    </jaas:module>
  </jaas:config>

</blueprint>

我看到了日志,也看到了域上的LDAP登录,因此我确信配置至少正在使用中

代码语言:javascript
复制
karaf@root(jaas)> jaas:realm-list
Index | Realm Name | Login Module Class Name
-----------------------------------------------------------------------
1     | karaf      | org.apache.karaf.jaas.modules.ldap.LDAPLoginModule

当我尝试ssh进入时,我得到以下日志(截断),并且我可以看到shark的LDAP通信:

代码语言:javascript
复制
2017-07-31 16:50:39,229 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Get the user DN.
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Looking for the user in LDAP with 
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 |   base DN: dc=eng,dc=net
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 |   filter: (samaccountname=jtAdmin)
2017-07-31 16:50:39,244 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Found the user DN.
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Bind user (authentication).
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Set the security principal for CN=jtAdmin,CN=Users,dc=eng,dc=net
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Binding the user.
2017-07-31 16:50:39,254 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin successfully bound.
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Looking for the user roles in LDAP with 
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 |   base DN: dc=eng,dc=net
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 |   filter: (member=CN=jtAdmin,CN=Users,DC=eng,DC=net)
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin is a member of role Domain Computers
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmin=admin,user,operator
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmin=admin,user,operator
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin is a member of role Domain Controllers

..。

代码语言:javascript
复制
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmins=admin,user,operator
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmins=admin,user,operator
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role admin
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role user
2017-07-31 16:50:39,365 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule                  | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role operator

我可以看到LDAP授权我的用户,但我似乎没有登录的权限。我以为role.mapping会处理将我的LDAP/AD成员身份映射到Karaf角色,但这似乎不允许我访问。Webconsole也尝试允许访问,但最终失败了。

映射LDAP/AD用户角色以为我的用户启用ssh karaf/console时,我缺少什么配置?我需要另一个登录模块吗?我如何动态地做到这一点(而不是在ldap-module.xml包中使用硬编码的role.mapping )?

理想情况下,我还希望能够同时授予ldap或本地用户访问权限,但我意识到这可能是不可能的。

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 00:25:31

幸运的是,我设法找到了根本原因。感谢karaf IRC频道上的朋友们,他们让我大声思考。

归根结底,我认为根本原因是这个例外:

代码语言:javascript
复制
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name ...

我实际上只在webconsole处理程序中看到了这个异常,而不是在ssh/shell处理程序中(但是ssh也不能工作,所以……)

异常来自LDAPCache.java (namingEnumeration.hasMore(),第259行),最终来自

代码语言:javascript
复制
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2914)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2888)

此异常将传播到调用方。由于我不能很好地更改JVM,因此我借用了一个建议/解决方案,即为ignorePartialNameResult添加一个关于此异常的配置选项。我不太理解为什么会有部分名称结果,但我看到了一个评论,暗示错误是由于role.base.dn与user.base.dn处于同一级别,这在我的例子中是正确的。在捕获异常并返回现有的roleList之后,我能够使用ldap用户成功登录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45426100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档