使用 MobileFirst 在移动应用程序中使用 LDAP 服务器对用户进行身份验证

Posted

技术标签:

【中文标题】使用 MobileFirst 在移动应用程序中使用 LDAP 服务器对用户进行身份验证【英文标题】:Using MobileFirst to authenticate users with LDAP server in mobile app 【发布时间】:2016-03-23 06:16:15 【问题描述】:

我遵循并使用了本教程: https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/authentication-security/using-ldap-login-module-to-authenticate-users-with-ldap-server-in-hybrid-applications/

我只编辑 authenticationConfig.xml 并运行应用程序

    <loginModule expirationInSeconds="-1" name="LDAPLoginModule">
        <className>com.worklight.core.auth.ext.LdapLoginModule</className>
        <parameter name="ldapProviderUrl" value="**************"/>
        <parameter name="ldapTimeoutMs" value="2000"/>
        <parameter name="ldapSecurityAuthentication" value="simple"/>
        <parameter name="validationType" value="searchPattern"/>
        <parameter name="ldapSecurityPrincipalPattern" value="username"/>
        <parameter name="ldapSearchFilterPattern" value="(&amp;(objectClass=user)(cn=username)(memberof=CN=******,OU=Clients,O=******))"/>
        <parameter name="ldapSearchBase" value="OU=Clients,O=******"/>
    </loginModule>

当我按下“呼叫保护适配器”时,它进入 LDAP 登录模块,当我输入用户凭据时,什么也没有发生,密码就消失了。

这是日志:

[警告] FWLSE4014W:LdapLoginModule 认证失败。原因'javax.naming.AuthenticationException:[LDAP:错误代码 49 - 8009030C:LdapErr:DSID-0C0903A9,注释:AcceptSecurityContext 错误,数据 2030,v1db1 在 com.sun.jndi.ldap.LdapCtx.mapErrorCode(未知来源) 在 com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源) 在 com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源) 在 com.sun.jndi.ldap.LdapCtx.connect(未知来源) 在 com.sun.jndi.ldap.LdapCtx.(未知来源) 在 com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(未知来源) 在 com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(未知来源) 在 com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(未知来源) 在 com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(未知来源) 在 org.apache.aries.jndi.ContextHelper.getInitialContextUsingBuilder(ContextHelper.java:244) 在 org.apache.aries.jndi.ContextHelper.getContextProvider(ContextHelper.java:208) 在 org.apache.aries.jndi.ContextHelper.getInitialContext(ContextHelper.java:141) 在 org.apache.aries.jndi.OSGiInitialContextFactoryBuilder.getInitialContext(OSGiInitialContextFactoryBuilder.java:51) 在 javax.naming.spi.NamingManager.getInitialContext(未知来源) 在 javax.naming.InitialContext.getDefaultInitCtx(未知来源) 在 javax.naming.InitialContext.init(未知来源) 在 javax.naming.ldap.InitialLdapContext.(未知来源) 在 com.worklight.core.auth.ext.LdapLoginModule.login(LdapLoginModule.java:158) 在 com.worklight.core.auth.impl.LoginContext.invokeLoginModule(LoginContext.java:252) 在 com.worklight.core.auth.impl.LoginContext.processRequest(LoginContext.java:217) 在 com.worklight.core.auth.impl.AuthenticationContext.processRequest(AuthenticationContext.java:510) 在 com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:182) 在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:206) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:86) 在 com.worklight.analytics.AnalyticsFilter.doFilter(AnalyticsFilter.java:124) 在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:206) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:86) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:978) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1100) 在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4730) 在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:297) 在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981) 在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262) 在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) ' [项目 LDAPLoginModule] [LDAP:错误代码 49 - 8009030C:LdapErr:DSID-0C0903A9,注释:AcceptSecurityContext 错误,数据 2030,v1db1

知道问题出在哪里吗?

【问题讨论】:

您是否尝试过在错误日志中搜索异常? social.technet.microsoft.com/Forums/windowsserver/en-US/… 是的,我试过谷歌搜索。很抱歉我没有找到这个网址。谢谢 【参考方案1】:

根据错误日志中提供的异常:LdapLoginModule authentication failed. Reason 'javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0903A9

这可能与以下内容有关:https://social.technet.microsoft.com/Forums/windowsserver/en-US/c98f3569-072a-4677-9b89-635ed2b8dffc/ldap-error-code-49-8009030c-ldaperr-dsid0c0903a9-comment-acceptsecuritycontext-error-data?forum=winserverDS

与 LDAP 相关的错误代码 49 是由无效凭据引起的。请参考以下最可能的原因。 1.您为管理员指定的DN路径或密码无效。以下任何一项都将导致此错误: 1)。指向非用户 DN 2)。指向一个不存在的用户,但在现有的 DN 3)。指向不存在的 DN 4)。指向现有用户,但不存在 DN 5)。指向不正确的管理员 DN,uid 而不是 cn 6)。指向非管理员用户 7)。指向有效的管理员,但密码不正确 2. 无法验证尝试登录的用户。这可能是由于用户名或密码不正确,或者“设置”选项卡中指定的前缀和/或后缀不正确,具体取决于 LDAP/AD 系统的类型。也可能意味着身份验证类型不正确。

【讨论】:

以上是关于使用 MobileFirst 在移动应用程序中使用 LDAP 服务器对用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Mobilefirst 移动应用和 THyM 移动应用的建议

要从 MobileFirst 服务器推送到移动设备的加密推送通知消息

MobileFirst - 社交登录实现

在 Google Appengine 中部署 MobileFirst 混合应用程序

使用 IBM MobileFirst Platform v7.1(包括 Dojo Toolkit SDK 1.10.3)开发的混合移动应用程序在升级到 iOS 10.3 后崩溃

使用 Ionic 开发 IBM MobileFirst Platform 混合应用程序