我有这个设置来连接我的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);
当密码处于“清除”状态时,一切正常。但是这个密码是从Web客户端获取的,它是哈希(使用JavaScript) 所以我没有明确的密码。 是否可以使用哈希密码配置环境贴图?怎么样?
答案 0 :(得分:1)
这是不可能的,这样做是错误的。
哈希用于保护明文密码在被访问(例如由管理员)或被盗时被泄露。因此,LDAP通常存储用户密码的哈希值。如果有人访问存储的LDAP密码哈希,则原始用户的密码不可见,因此无法用于身份验证。
如果您接受密码的哈希作为有效的身份验证方法,那么访问哈希将使某人能够在不知道原始密码的情况下进行身份验证。
如果您绝对需要在浏览器中完成身份验证,那么将密码的哈希从LDAP传递到客户端并使用JavaScript验证用户的输入与接收的哈希值会更安全。在这种情况下,盐是绝对必须的,这实际上不是你应该实现安全性的方式。
答案 1 :(得分:0)
似乎你不理解哈希作为操作。 当您对字符串进行哈希处理时,您无法将其转换回来。
只有散列才有意义的是将与另一个散列字符串进行比较。如果两个散列字符串相同 - 您可以断定两个预先散列的字符串是相同的(相等)。
对于您的特定情况 - 您应该将散列作为安全措施,因为您无法使用散列密码登录。
如果您想了解更多信息,请查看this。