IBM Worklight:成功完成基于适配器的身份验证后无法获得响应

时间:2014-09-09 14:58:19

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

Worklight Studio 6.0.0.2; Worklight Server 6.0.0; Android上的混合应用程序;

最近,我发现了基于Worklight Adapter的身份验证的另一种奇怪行为。下面的#7步骤对我来说并不会发生(以下7个步骤是来自Anton的一个答案的副本),如果我在开始时通过了auth,然后在背景。 Worklight会话过期后,将应用程序返回到前台。此时,第一个请求在与WL服务器重新验证时不会得到响应。

  1. 您正在向服务器发出请求#1(让我们说出调用程序)
  2. 您通过authRequired获得回复:true
  3. 您提交身份验证数据
  4. 您正在获取authRequred:false
  5. 您正在调用submitSuccess()
  6. WL框架自动重新调用请求#1
  7. 您正在收到请求#1
  8. 的回复

    Android日志:

    D/NONE(19720): Request [https://xxx/android/composite]
    D/NONE(19720): auth required: true
    D/NONE(19720): re-submit custom auth
    D/NONE(19720): Request [https://xxx/../../invoke]
    D/NONE(19720): auth required: false
    D/NONE(19720): response.responseJSON: {"isSuccessful":true,"authRequired":false}
    D/NONE(19720): Request [https://xxx/android/composite]
    

    请参阅?没有得到"复合"请求。实际上,在某些情况下我也没有得到其他#1请求的响应,这导致我的应用程序无法继续。在这种情况下,我必须发送两个相同的请求:一个请求没有响应;另一个效果很好。

    有什么想法吗?提前谢谢。

    更新

    通过PC浏览器,我发现#6步的请求有403错误...;

    我的一些代码:

    pushAppRealmChallengeHandler.handleChallenge = function(response){
            var authRequired = response.responseJSON.authRequired;
            var loginForm = registry.byId("loginPage");
    
            if(authRequired){
                WL.Logger.debug("auth required: " + authRequired);
                if(response.responseJSON.errorMessage != null){
                    mBase.showProgressIndicator();
                    loginForm.hintNode.innerHTML = response.responseJSON.errorMessage;
                    loginForm.usernameNode.domNode.focus();
                }else{
                    WL.Logger.debug("re-submit custom auth");
                    pushAppRealmChallengeHandler.doCustomAuth(loginForm.usernameNode.get('value'), loginForm.passwordNode.get('value'));
                }
            }else if(authRequired == false){
                WL.Logger.debug("auth required: " + authRequired);
                if(!pushAppRealmChallengeHandler._authFinished){
                    pushAppRealmChallengeHandler._authFinished = true;
    
                    ...
    
                    pushAppRealmChallengeHandler.submitSuccess();
                }else {
                    WL.Logger.debug("response.responseJSON: " + dojo.toJson(response.responseJSON));
                    pushAppRealmChallengeHandler.submitSuccess();
                }
            }
        };
    
    pushAppRealmChallengeHandler.doCustomAuth = function(userName, password) {  
            var loginForm = registry.byId("loginPage");
            var invocationData = {
                adapter : "AuthAdapter",
                procedure : "submitAuthentication",
                parameters : [Base64.encode(userName), Base64.encode(password), userName, pushAppRealmChallengeHandler._authFinished]
            };
            pushAppRealmChallengeHandler.submitAdapterAuthentication(invocationData, {
                onFailure : function() {
                    mBase.showProgressIndicator();
                    loginForm.hintNode.innerHTML = Messages.WLErrMsg;//netErrMsg;
                }
            });
        };
    

1 个答案:

答案 0 :(得分:0)

我的团队通过更改mobileSecurityTest的配置来解决此问题。原因是测试领域之一没有给出响应。所以,我的团队删除了测试领域属于mobileSecurityTest。

<mobileSecurityTest name="PushApplication-strong-mobile-securityTest">
    <testUser realm="PushAppRealm"/>
    <testDeviceId provisioningType="none"/>
</mobileSecurityTest>

<customSecurityTest name="PushApplication-strong-mobile-securityTest">
    <test realm="wl_remoteDisableRealm"/>
    <test realm="PushAppRealm" isInternalUserID="true"/>
    <test realm="wl_deviceNoProvisioningRealm" isInternalDeviceID="true" />
</customSecurityTest>