我想使用Java针对VDS(虚拟目录服务器)对用户进行身份验证。
请帮助使用任何示例Java代码来验证VDS
对LDAP进行身份验证的示例代码如下所示
String userName = "John P R-Asst General Manager";
String passWord = "asdfgh123";
String base ="OU=SOU,DC=example,DC=com";
String dn = "cn=" + userName + "," + base;
String ldapURL = "ldap://mdsdc3.example.com:389";
authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, ldapURL);
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, dn);
authEnv.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext authContext = new InitialDirContext(authEnv);
return true;
} catch (NamingException namEx) {
return false;
} 要针对VDS进行身份验证,需要一个完整的dn。因为根据专家的说法,只需要将用户名和密码发送到VDS。它将自动找到它的DN并进行身份验证。如果有人提供关于ldap和vds的好参考资料,我们将非常感激。
发布于 2015-10-30 12:26:14
虚拟目录服务器是一种服务器类型,它提供身份的统一视图,而不管它们是如何存储的。(或者您可能更喜欢维基百科的定义:“为身份管理应用程序和服务平台提供单一访问点的软件层”)。
LDAP是一种用于与目录服务器通信的协议(因此是"P")。
LDAP和VDS之间没有必要的链接,但很可能VDS提供和LDAP接口,可能还有其他编程接口(尤其是Kerberos)。您如何与VDS通信的细节将取决于您试图与之交谈的配置,但LDAP是一个很好的选择。
关于需要一个完整的DN,您甚至不需要一个完整的DN来根据普通的Active进行身份验证。更常见的模式是提供类似于DOMAIN\username (使用sAMAccountName)或username@dc.example.com (即user principal name)的东西作为SECURITY_PRINCIPAL。在您的示例中,用户需要键入John P R-Asst General Manager,而不是他们可能认为是“用户名”的任何内容。
但是,您确实需要计算出您试图与之通信的VDS所需的用户名。它还需要DOMAIN\username吗?这些细节说明,无论谁运行与您通信的VDS,都应该能够提供给您。
在代码中,您应该得到这样的结果(假设您可以使用LDAP):
String userName = "DOMAIN\johnp";
String passWord = "asdfgh123";
String ldapURL = "ldaps://vds.example.com";
authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, ldapURL);
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, username);
authEnv.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext authContext = new InitialDirContext(authEnv);
return true;
} catch (NamingException namEx) {
return false;
} https://stackoverflow.com/questions/33388306
复制相似问题