gpt4 book ai didi

java - Spring LDAP Authentication 的用户账户概念

转载 作者:行者123 更新时间:2023-11-29 08:29:32 25 4
gpt4 key购买 nike

我正在开发 Spring Web 应用程序的身份验证功能。客户已经拥有一个包含其员工数据的现有 Active Directory。 AD 中的任何员工都可以使用他们现有的用户名和密码登录到我的 Web 应用程序,Web 应用程序应使用给定的用户名和密码从 AD 获取员工数据,然后自动将员工注册到 Web 应用程序使用来自 AD 的数据在数据库中创建用户帐户记录。

以下是上述 Action 的顺序。

  1. 用户提交带有用户名和密码的登录表单。
  2. Web 应用程序使用给定的用户名和密码从 AD 查询员工数据。
  3. Web 应用程序使用员工数据在数据库中创建用户帐户记录。

我卡在了第 2 步。因为这是我第一次使用 LDAP,所以我对这个主题的理解很肤浅。

目前我可以使用以下代码成功列出广告中的所有人名。

@SpringBootApplication
public class Main implements ApplicationRunner {

private static final Logger logger = LoggerFactory.getLogger(Main.class);

@Autowired
private LdapTemplate ldapTemplate;

public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}

@Override
public void run(ApplicationArguments args) throws Exception {
logger.info("----------------------");
logger.info(getAllPersonNames().toString());
logger.info("----------------------");
}

private List getAllPersonNames() {
EqualsFilter filter = new EqualsFilter("objectclass", "person");
return ldapTemplate.search(DistinguishedName.EMPTY_PATH, filter.encode(),
(AttributesMapper) attrs -> attrs.get("cn").get());
}

@Bean
public LdapContextSource contextSource(Environment env) {
LdapContextSource contextSource = new LdapContextSource();

contextSource.setUrl("ldap://localhost:5555");
contextSource.setBase("DC=myorg,DC=com");
contextSource.setUserDn("username");
contextSource.setPassword("password");
return contextSource;
}

@Bean
public LdapTemplate ldapTemplate(Environment env) {
return new LdapTemplate(contextSource(env));
}

}

这段代码有问题。我将 usernamepassword 放在将在应用程序启动时使用的 LdapContextSource bean 中。这不是我想要的,因为 usernamepassword 必须由用户在运行时提供。

但是!我找到了这个 example并开始感到困惑。在示例中,有两组用户名和密码,一组用于设置 LdapContextSource,一组由用户在运行时提供。

所以我想我可能有一些误解。 请帮助说明 LdapContextSource 中设置的用户名/密码是否应该由用户提供,或者我应该有一个单独的用户名/密码仅用于我的应用程序?

最佳答案

我不确定我的回答是否能澄清问题,但无论如何我都会尝试。

当我想将 Camunda BPMN 集成到现有应用程序中时,我遇到了同样的问题。作为初学者,我花了一些时间才意识到 LDAP 协议(protocol)的工作原理。

检查一下,它可能有用:

https://docs.camunda.org/manual/7.7/user-guide/process-engine/identity-service/

如果大家觉得我说的不对,欢迎在下方评论指正。

事实上,硬编码凭据应该是管理员的凭据,它将检查是否接受任何用户(在应用程序内动态)的给定用户名和密码。

管理员的信息还用于收集普通用户无法读取的 LDAP 组信息。

为了绕过这个问题,我实现了自己的身份验证类,它尝试使用用户的凭据连接到 LDAP,如果它抛出异常,则意味着给定的信息是错误的。但是,您将无法提供用户的组信息等。

很抱歉我无法提供代码,因为我已经没有了。

祝你好运

关于java - Spring LDAP Authentication 的用户账户概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com