0

当我尝试从模拟器中的 WL hybird 应用程序登录时,出现以下异常。

环境:

1) 使用默认 Liberty 概要文件和 Derby 数据库安装的 Worklight Server(505 版本)。
2) Userregistry 配置为 LDAP。LDAP 已启动并正在运行。
3) 我遵循了“模块 20.1 基于表单的身份验证”

Server.xml 配置正确:

   ldapRegistry id="IBMDirectoryServerLDAP" realm="defaultWIMFileBasedRealm"
        host="testserver.com" port="4389" ignoreCase="true"
        baseDN="dc=ibm,dc=com"
        bindDN="cn=xyz"
        bindPassword="xyz123"
        ldapType="IBM Tivoli Directory Server" reuseConnection="true"
        idsFilters
            userFilter="(&(uid=%v)(objectclass=ePerson))"
            groupFilter="(&(cn=%v)(|(objectclass=groupOfNames)(objectclass=groupOfUniqueNames)(objectclass=groupOfURLs)))"
            userIdMap="*:uid"
            groupIdMap="*:cn"
            groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember;groupOfNames:member;groupOfUniqueNames:uniqueMember"
    ldapRegistry

登录模块是:com.worklight.core.auth.ext.WebSphereLoginModule
Authenticator 是:com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator

例外:

[RandomNumberGenerationServlet]: Initialization successful.
[2/13/13 15:37:21:349 IST] 00000049 com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator  I FWLSE0055I: Not recognized.
[2/13/13 15:38:27:288 IST] 0000004b ication.internal.jaas.modules.UsernameAndPasswordLoginModule A CWWKS1100A: Authentication did not succeed for user ID wpsbind. An invalid user ID or password was specified.
[2/13/13 15:38:27:742 IST] 0000004f com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator  I FWLSE0055I: Not recognized.
[2/13/13 15:38:27:746 IST] 0000004f com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator  I FWLSE0055I: Not recognized.
[2/13/13 15:38:27:747 IST] 0000004f com.worklight.core.auth.impl.AuthenticationFilter            E FWLSE0048E: Unhandled exception caught: realm WASLTPARealm is not allowed to ignore request to a protected resouce in a non-success state
java.lang.IllegalStateException: realm WASLTPARealm is not allowed to ignore request to a protected resouce in a non-success state
    at com.worklight.core.auth.impl.AuthenticationContext.checkAuthentication(AuthenticationContext.java:515)
    at com.worklight.core.auth.impl.AuthenticationContext.processRealms(AuthenticationContext.java:396)
    at com.worklight.core.auth.impl.AuthenticationContext.pushCurrentResource(AuthenticationContext.java:373)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:63)
    at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:162)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:85)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:940)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1037)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:930)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:274)
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:529)
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398)
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:380)
4

1 回答 1

0

身份验证在 Liberty 中进行,为了让 Worklight 识别登录用户,它需要知道它。

基于表单的身份验证在这里无济于事。您可以而且应该做的是实现一个基于自定义的身份验证器,它将从 Liberty 的响应中检索包含用户信息的自定义 HTTP 标头。

您可以在以下入门培训模块中阅读有关基于自定义的身份验证的更多信息,以首先熟悉该概念:ftp: //public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/Module_23_ -_Custom_Authenticator_and_Login_Module.pdf

要获得更清晰的身份验证流程“图像”,您可以查看如下所示的图表:http: //pic.dhe.ibm.com/infocenter/wrklight/v5r0m5/topic/com.ibm.worklight.help.doc/整合/r_authentication_at_the_gateway.html

于 2013-02-13T11:49:08.820 回答