无法在IBM Worklight中使用LDAP身份验证进行身份验证

时间:2013-03-14 19:54:25

标签: authentication ldap ibm-mobilefirst

我正在使用IBM Worklight开发移动应用程序,并且我在身份验证方面存在一些问题。我正在使用自定义身份验证器和自定义登录模块来验证针对Tivoli目录服务器的用户凭据。

这是我正在使用的代码,它在Worklight Studio中像java应用程序(带有main方法的类)一样运行时有效,但是当我像Worklight应用程序一样运行它时(在我的自定义登录的登录功能中) module)它返回一个命名异常并打印jndi.20

public boolean login(Map<String, Object> authenticationData) {
    logger.info("SmaciLoginModule :: login");

    try{
        USERNAME = (String) authenticationData.get("username");
        PASSWORD = (String) authenticationData.get("password");
        String solicuser="uid="+USERNAME+",cn=users,dc=smaci,dc=ibm";
        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://127.0.0.1:1389/");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, solicuser);
        env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
        DirContext ctx = new InitialDirContext(env);
        boolean result = ctx != null;

                if(ctx != null)
                    ctx.close();

            return result;

        }catch (Exception e) {
            throw new RuntimeException("Invalid credentials"+e.getMessage());
        }
}

我希望你能解决我的问题。我没有使用LDAP的经验,我很感激任何建议。 谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试使用此行从用户那里获取密码? String pass=(String) entry.get("password").get().toString();

如果是这样,那不太可行。密码几乎永远不会通过LDAP检索。 (例外有点复杂,所以认为不可能)。

您要做的是尝试使用solicuser构建的DN和PASSWORD值进行绑定。然后成功(密码不是空的,因为它总是成功,但作为一个匿名绑定,所以你必须注意它)你知道你已经过身份验证。否则你就失败了。您可能希望检查可能的错误消息。各种LDAP服务器提供不同的错误。有些人会报告错误的密码或错误的DN(即没有这样的用户)。其他人没那么多。