当前位置: 首页 > 知识库问答 >
问题:

Quarkus LDAP获取用户数据

卫松
2023-03-14

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

我以为它会出现在方法身份中。getAttributes()但这给了我一个空映射。

以下是一个用户示例:

# 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?

非常感谢您的帮助,

托马斯

共有1个答案

盖辉
2023-03-14

好吧,我找到了一个答案,这个答案很难看,但确实有效。

因为我无法找到如何使用该框架获取数据,所以我尝试使用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;

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

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

托马斯

 类似资料:
  • 我有一个辅助项目网站,人们可以在那里评论东西,现在我需要显示用户的评论和评论者的用户名。问题是,我无法获得登录用户的用户名。 评论示例: 1) 评论人-Shelo 测试评论 2) 评论人-ProGa 测试评论2 现在的问题是,如果我试图获取“当前登录”用户的用户名,当用户登录时,两条评论都会有相同的用户名 上面的代码示例是您当前登录用户的方式。因此,如果我使用这段代码,并尝试通过

  • 接口说明 获取当前登录用户id 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/getId 是否需要登录 是 请求字段说明 无 响应字段说明 参数 类型 说明 userId String 登录用户id 响应成功示例 { "code": 200, "data": { "userId":

  • 我目前正在处理一个在客户端初始化了firebase的应用程序。当用户通过 firebase 登录时,我想从 firestore 中获取用户的数据。我目前正在侦听器中执行此操作并成功获取用户。我想知道这是否是获取用户数据的最佳方式。我的代码如下: 我主要担心的是,每次刷新应用程序时都会获取用户的数据。关于此事的任何建议或最佳做法将不胜感激

  • 我有一个Web角前端,API网关受Cognito和Lambda保护,用于其他业务用例。登录和授权工作正常。我正在使用AWS Javascript SDK进行授权。像https://s3.amazonaws.com/solutions-reference/mobile-backend/latest/mobile-app-backend.pdf 在我的lambda中,我需要获得其他用户的信息,如名字、

  • 问题内容: 哪个是最好的方法?php或javascript。有人可以向我提供一些摘要吗?谢谢。 问题答案: 这将使您的时区成为PHP变量。我使用jQuery和PHP编写了一个函数。经过测试,可以正常工作! 在您希望将时区作为变量的PHP页面上,将此代码段放在页面顶部附近: 这将读取我们现在将要创建的会话变量“时间”。 在同一页面的该部分中,首先需要包括jQuery: 同样在本节中,粘贴此jQuer

  • X1.2新增 sp_get_users($tag,$where) 功能: 获取符合条件的用户列表; 参数: $tag:查询标签,默认:field:*;limit:0,8;order:create_time desc; $where:查询where数组,按照thinkphp where array格式; 返回: 数组,符合条件的用户列表 使用 //获取最新注册的8个新用户 $las