Quarkus LDAP获取用户数据 [英] Quarkus LDAP get user data

查看:0
本文介绍了Quarkus LDAP获取用户数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用一个OpenLDAP服务器对我的Quarkus应用程序上的用户进行身份验证。 一切正常,但我想检索我的用户数据。

我以为它会在方法identity.getAttributes()中,但这给了我一个空的Map。

以下是一个用户的示例:

# tesla, example.com
dn: uid=tesla,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: posixAccount
cn: Nikola Tesla
sn: Tesla
uid: tesla
mail: tesla@ldap.forumsys.com
uidNumber: 88888
gidNumber: 99999
homeDirectory: home

这也是我的ldap配置:

quarkus.security.ldap.enabled=true
quarkus.security.ldap.dir-context.url=ldap://ldap.forumsys.com:389/

quarkus.security.ldap.dir-context.principal=cn=read-only-admin,dc=example,dc=com
quarkus.security.ldap.dir-context.password=password

quarkus.security.ldap.identity-mapping.rdn-identifier=uid
quarkus.security.ldap.identity-mapping.search-base-dn=dc=example,dc=com

quarkus.security.ldap.identity-mapping.attribute-mappings."0".from=cn
quarkus.security.ldap.identity-mapping.attribute-mappings."0".to=groups
quarkus.security.ldap.identity-mapping.attribute-mappings."0".filter=(member=uid={0})
quarkus.security.ldap.identity-mapping.attribute-mappings."0".filter-base-dn=dc=example,dc=com

如何获取我的用户邮件和CN?

提前感谢您的帮助

托马斯

推荐答案

好的,我找到了一个答案,虽然很难看,但确实有效。

因为我找不到如何使用框架获取数据,所以我尝试使用ldapsearch在命令行中获取数据。 因此,我可以通过运行以下命令检索我的用户数据:

ldapsearch -H ldap://ldap.forumsys.com:389/ -x -D "cn=read-only-admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=tesla)"

这给了我:

dn: uid=tesla,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: posixAccount
cn: Nikola Tesla
sn: Tesla
uid: tesla
mail: tesla@ldap.forumsys.com
uidNumber: 88888
gidNumber: 99999
homeDirectory: home
现在,身份验证起作用了,我可以从我的SecurityIdentity检索登录名(使用identity.getPrincipal().getName()),并且我有这个命令为我提供特定用户的数据。我想你明白这一点了。 我在Java中运行此命令并手动检索数据。

以下是Java中的代码:


final String cmd = "ldapsearch -H " + ldapUrl + " -x -D "" + ldapUser + "" -w " + ldapPassword + " -b "" + ldapFilter + "" -LLL "(uid=" + login + ")"";
String[] shellCommand = { "/bin/bash", "-c", cmd };

final Map<String, String> map = new HashMap<>();

Process process = Runtime.getRuntime().exec(shellCommand);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
    if(line.contains(": ")) {
        final String key = line.split(": ")[0];
        final String value = line.split(": ")[1];

        map.put(key, value);
    }
}
return map;

请注意,我每个键只有一个值,因为我感兴趣的数据有一行。

这是我为我的问题找到的答案。 我希望有人能找到更干净的东西。

托马斯

这篇关于Quarkus LDAP获取用户数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆