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

从Java(web应用程序)对Active Directory 2016进行身份验证

邵宏达
2023-03-14

我已经设置了一个广告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();  
    }

现在我在以下场景中测试了用户/密码组合-

//第一个组合,user1存在于AD中并且密码正确(测试经过身份验证的绑定)。字符串userid=“user1@domain.com”,password=“user1password”;预期:身份验证成功。实际:身份验证成功。这一点我很清楚。对于不正确的密码,它响应正确的消息-身份验证失败。

共有1个答案

马晓博
2023-03-14

您看到的是一个“未经身份验证的绑定”,详细说明见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一起使用,否则其他活动目录也是以这种方式配置的,这是不安全的假设。

 类似资料:
  • 问题内容: 我正在使用以下过滤器在我的Web应用程序中启用NTLM身份验证。 我得到Windows浏览器身份验证提示。运行正常。除了以下事实外- 我无法确定身份验证是成功还是失败! * 两种情况均无错误。 *在每种情况下都将打印用户名(正确或相反),工作站等。 web.xml很简单: 问题答案: 您收到的是Type 3消息,但是除了打印出详细信息之外,您什么都没做。此时,您需要验证客户的响应,并发

  • 我正在尝试访问一个我在Azure上托管并用Azure AD保护的API应用程序。 对于API应用程序,我已经设置了App Service Authentication=Azure Active Directory“Express”管理模式。 在“Classic”门户中,我在AD下创建了几个应用程序。一个用于API应用程序,另一个用于Web应用程序。对于Web应用程序,我在API应用程序的“对其他应

  • 我需要在我们的Web应用程序中使用LDAP/AD服务器实现SSO身份验证和验证用户。Web应用程序是使用Spring(Java)/Hibernate制作的,应用程序服务器是UAT中的Jboss和生产中的Webphere。 我正在寻找一些好的简单的解决方案,可以帮助我实现它,从几个朋友那里听说华夫饼是一个很好的解决方案,但是在网上搜索并尝试了几天之后,我不确定我是否朝着正确的方向前进。我在这方面很幼

  • 问题内容: 简短的问题: 我在.NET中有一个Web API服务,而一个站点仅由HTML和AngularJS组成。 如何仅对我的网站授权给我的服务? 我正在寻找一个似乎很常见但不是常见问题的安全答案。在最近的日子里,我读了很多答案,想法和各种各样的东西,但是找不到解决方案。 假设我有一个来自MS的Web Api服务(最新的)。所以我必须要消耗它的应用程序。让我们定义两个方案。 方案1: 在同一个I

  • 我们有一个使用REST API的Web应用程序。RESTAPI基于环回并使用其内置的基于令牌的身份验证。对于Web应用程序,我们通过HTTPS使用基于表单的身份验证,因此用户必须输入其用户名和密码,然后我们使用这些用户名和密码通过POST/users/loginendpoint从REST API获取访问令牌。 我们的一位客户要求我们通过SAML 2.0和AD FS支持单点登录(SSO)身份验证。

  • 我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。 这是我的安全会议。xml: