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

标签 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 的经验,感谢任何建议。 谢谢!

最佳答案

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

如果是这样,那不太可能起作用。密码几乎无法通过 LDAP 检索。 (异常(exception)情况稍微复杂,因此认为这是不可能的)。

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

关于authentication - 无法在 IBM Worklight 中使用 LDAP 身份验证进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418937/

相关文章:

laravel - 如何在laravel中对多个项目进行单一身份验证?

grails - 如何使用 JOSSO 和 Spring Security 从 Grails 应用程序中的 LDAP 获取自定义属性?

ios - 网关挑战处理程序 : handleChallenge() not being called after upgrading to MobileFirst v. 8.0

java - 通过 AJP 将远程用户传递给 tomcat

c++ - 通过 IADS 删除 Active Directory 中的对象

javascript - phoneGap/Apache Cordova 媒体捕获插件 - 多视频录制

AngularJS 1.5 错误引导 IBM Mobilefirst

ruby - 具有身份验证的私有(private) Ruby Gem 服务器

java - 如何实现正确的 https 客户端身份验证

tomcat 配置为不遵守证书的扩展 key 使用