来自LDAPRealm的Worklight LDAP身份验证注销

时间:2014-10-31 09:54:59

标签: authentication ibm-mobilefirst worklight-adapters worklight-server worklight-security

我正在尝试使用IBM Worklight Studio 6.2.0.01创建LDAP身份验证系统

登录系统工作正常,该部分没问题,但注销功能实际上并未注销用户!

境界:

<realm loginModule="LDAPLoginModule" name="LDAPRealm">
    <className>com.worklight.core.auth.ext.FormBasedAuthenticator</className>
</realm>

LoginModule:

<loginModule name="LDAPLoginModule">
    <className>com.worklight.core.auth.ext.LdapLoginModule</className>
    <parameter name="ldapProviderUrl" value="<Correct LDAP URL ( For security left blank on stackoverflow )>"/>
    <parameter name="ldapTimeoutMs" value="2000"/>
    <parameter name="ldapSecurityAuthentication" value="simple"/>
    <parameter name="validationType" value="exists"/>
    <parameter name="ldapSecurityPrincipalPattern" value="{username}"/>
</loginModule>

SecurityTest:

<customSecurityTest name="LDAPSecurityTest">
    <test realm="wl_directUpdateRealm" step="1"/>
    <test isInternalUserID="true" realm="LDAPRealm"/>
</customSecurityTest>

AdapterXML(重要部分)

<procedure name="getUsername"  securityTest="LDAPSecurityTest" />
<procedure name="onLogout" />

AdapterJS

function getUsername(){
    return {username: ""};
}

function onLogout(){
    WL.Server.setActiveUser("LDAPRealm", null);
}

每当应用想要检查用户当前是否已登录时,都会调用getUsername函数,除此之外它没有任何功能。

退出功能(App端)

$scope.setUsername = function(){
    var invocationData = { adapter: "DummyAdapter", procedure: "getUsername"} 
    WL.Client.invokeProcedure(invocationData, {
        onSuccess: function(result){}, 
        onFailure: function(result){);
}

$scope.logout = function(){
    WL.Client.logout("LDAPRealm", {onSuccess: $scope.setUsername});
}

结果:这会让应用程序通过注意用户已注销进入登录页面,只有问题是..它还没有完全注销用户。如何让用户完全注销?

PS:为什么我在WL.Client.logout()之后不使用WL.Client.reloadApp?有两个原因:

  1. 白色屏幕并重新加载整个应用程序只是很脏,它根本不是用户友好的。
  2. WL.Client.reloadApp在Android Lollipop(Android 5.0)上发出致命信号11(代码1)。至少,这是我的worklight版本(6.2.0.01)。
  3. ,有没有办法可以避免WL.Client.reloadApp并仍然从服务器注销用户?如果不是:什么可能导致Android Lollipop中的致命信号11(代码1)错误?我已经在iOS 8.0,Android 2.3.5,Android 4.4.2和Android 5.0上进行了彻底的测试。只有一个失败的是5.0

    谢谢你,很抱歉这篇长篇文章

1 个答案:

答案 0 :(得分:1)

我通过从logout onsuccess中删除WL.Client.reloadApp函数来解决问题,我这样做了:

$scope.logout = function(){
        WL.Client.logout("LDAPRealm", {onSuccess: function(){ 
            $scope.setUsername() // <-- this function is the secret function
                                 //     that triggers the securitytest
                                 //     which then gives back the login page because
                                 //     you had just logged out :)
        }});
}

对于未注销用户的适配器:此注释为false,此错误源于另一个问题。所以我在StackOverflow上发布的代码很好。但仍然:

Android 5.0和WL.Client.reloadApp 不顺利(2014年11月5日,如果更新修复此问题)