0

我想使用 Java 针对 VDS(虚拟目录服务器)对用户进行身份验证。

  • VDS 与 LDAP 有何不同?还是 VDS 也在使用 LDAP 协议?

请帮助提供任何用于针对 VDS 进行身份验证的示例 Java 代码

针对 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 的参考资料,将不胜感激

4

1 回答 1

0

虚拟目录服务器是一种服务器,它提供统一的身份视图,而不管它们是如何存储的。(或者您可能更喜欢Wikipedia 的定义:“为身份管理应用程序和服务平台提供单一访问点的软件层”

LDAP 是一种用于与目录服务器通信的协议(因此称为“P”)。

LDAP 和 VDS 之间没有必要的链接,但 VDS 很可能提供 LDAP 接口,并且可能还提供其他编程接口(尤其是 Kerberos)。您如何与 VDS 通信的详细信息将取决于您尝试与之通信的配置,但 LDAP 是一个不错的选择。

关于需要完整的 DN,您甚至不需要完整的 DN 来针对普通 Active Directory 进行身份验证。更常见的模式是提供类似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;
} 
于 2015-10-30T12:26:14.653 回答