使用 MD5 密码连接到 LDAP
Connecting to LDAP with MD5 password
我有这个连接到我的 LDAP 的设置:
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://urlTomyLDAP:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, name);
env.put(Context.SECURITY_CREDENTIALS, password);
当密码在 "clear" 时一切正常。但是这个密码是从网络客户端得到的,它是散列的(JavaScript)。
所以我没有明确的密码。
是否可以使用我的散列密码配置环境映射?以及如何?
看来你并没有把散列理解为运算。
当你散列字符串时,你不能将它转换回来。
唯一对散列有意义的是将它与另一个散列字符串进行比较。如果两个散列字符串相同 - 您可以得出结论,两个预散列字符串相同(相等)。
对于您的特定情况 - 您应该保留散列作为安全措施,因为您将无法使用散列密码登录。
如果您想了解更多信息,请查看 this。
这是不可能的,这样做是错误的。
哈希用于保护明文密码在被访问(例如被管理员访问)或被盗时不被泄露。因此 LDAP 通常存储用户密码的哈希值。如果有人可以访问存储的 LDAP 密码哈希,则原始用户的密码不可见,因此不能用于身份验证。
如果您接受密码的哈希作为有效的身份验证方法,那么访问哈希将使某人能够在不知道原始密码的情况下进行身份验证。
如果您绝对需要在浏览器中完成身份验证,那么将密码的散列从 LDAP 传送到客户端并根据 JavaScript 收到的散列验证用户的输入会更安全。在这种情况下,salt 是绝对必须的,这实际上不是您应该实现安全性的方式。
我有这个连接到我的 LDAP 的设置:
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://urlTomyLDAP:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, name);
env.put(Context.SECURITY_CREDENTIALS, password);
当密码在 "clear" 时一切正常。但是这个密码是从网络客户端得到的,它是散列的(JavaScript)。
所以我没有明确的密码。
是否可以使用我的散列密码配置环境映射?以及如何?
看来你并没有把散列理解为运算。 当你散列字符串时,你不能将它转换回来。
唯一对散列有意义的是将它与另一个散列字符串进行比较。如果两个散列字符串相同 - 您可以得出结论,两个预散列字符串相同(相等)。
对于您的特定情况 - 您应该保留散列作为安全措施,因为您将无法使用散列密码登录。
如果您想了解更多信息,请查看 this。
这是不可能的,这样做是错误的。
哈希用于保护明文密码在被访问(例如被管理员访问)或被盗时不被泄露。因此 LDAP 通常存储用户密码的哈希值。如果有人可以访问存储的 LDAP 密码哈希,则原始用户的密码不可见,因此不能用于身份验证。
如果您接受密码的哈希作为有效的身份验证方法,那么访问哈希将使某人能够在不知道原始密码的情况下进行身份验证。
如果您绝对需要在浏览器中完成身份验证,那么将密码的散列从 LDAP 传送到客户端并根据 JavaScript 收到的散列验证用户的输入会更安全。在这种情况下,salt 是绝对必须的,这实际上不是您应该实现安全性的方式。