【问题标题】:Authentication against VDS LDAP针对 VDS LDAP 的身份验证
【发布时间】:2016-01-28 01:32:48
【问题描述】:

我想使用 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 的参考资料,将不胜感激

【问题讨论】:

  • 您是否在问身份验证系统之间的区别是什么(在这种情况下,您最好在不同的站点,也许是服务器故障)?或者你知道你想要做什么但不能让 java 代码工作(在这种情况下,你需要非工作代码和一个 java 标签)?
  • 请澄清您的问题。
  • 改进的代码格式

标签: authentication active-directory ldap ldap-query vds


【解决方案1】:

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

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;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2017-06-03
    • 2011-09-23
    • 2017-01-09
    相关资源
    最近更新 更多