[英]Authenticating against Active Directory 2016 from Java(web applications)
我已经设置了 AD 2016 安装。 现在打算将其用于 Web 应用程序 (java) 的身份验证。 我有一段用于测试身份验证的代码并有一些观察。
public static void main(String[] args)
{
String userid="userhere",password="passwordhere";
LdapContextCreation ldapContxCrtn = new LdapContextCreation();
LdapContext ctx = ldapContxCrtn.getLdapContext(userid,password);
if(ctx==null)
{System.out.println("Authentication Failed.");}
else
{System.out.println("Authentication Successful.");}
}
public LdapContext getLdapContext(String base, String password)
{
LdapContext ctx = null;
try
{
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
env.put(Context.SECURITY_PRINCIPAL, base);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.PROVIDER_URL, "ldaps://mydomaincontroller:636");
ctx = new InitialLdapContext(env, null);
}
catch(NamingException nex)
{
//nex.printStackTrace();
}
现在我在以下场景中测试了用户/密码组合 -
//第一个组合,AD中存在user1且密码正确(测试认证绑定)。 String userid="user1@domain.com",password="user1password"; 预期:身份验证成功。 实际:身份验证成功。 这对我来说很清楚。 对于不正确的密码,它会响应正确的消息 - 身份验证失败。
//第二个组合,AD中存在user2但我们尝试发送的密码为空(测试未认证绑定) String userid="user2@domain.com",password=""; 预期:身份验证失败。 实际:身份验证成功。 如何处理这种情况 - 我可以在 AD 中控制它还是必须在代码中处理?
//第三个组合,AD中不存在user3(测试不存在的用户) String userid="user3@domain.com",password="somepassword"; 预期:身份验证失败。 实际:身份验证成功。 如何处理这种情况? 用户甚至不存在。 这是 AD 配置错误吗?
//第四个组合,空用户名密码(测试匿名绑定) String userid="",password=""; 预期:身份验证失败。 实际:身份验证成功。 如何处理这种情况 - 我可以在 AD 中控制它还是必须在代码中处理?
您看到的是“未经身份验证的绑定”,在LDAP RFC 4513 第 5.1.2 节中有详细说明,并附有关于第 6.3.1 节中后续安全注意事项的注释。
最好在代码中处理这个问题(即在与目录服务器通信之前验证用户名和密码都是非空的)。 在 Windows 2019 中添加了禁止未经身份验证的绑定操作的设置——在您的配置分区中,打开CN=Directory Service, CN=Windows NT, CN=Services, CN=Configuration
属性——找到 msDS-Other-Settings 属性,并添加一个新条目DenyUnauthenticatedBind=1
但除非您正在编写一个一次性应用程序,该应用程序将只与您拥有的 Active Directory 一起使用,否则以这种方式配置其他 Active Directory 并不是一个安全的假设。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.