0

工作灯工作室 6.0.0.2;工作灯服务器 6.0.0;Android 上的混合应用程序;

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

  1. 您正在向服务器发出请求#1(比如说调用过程)
  2. 您收到 authRequired:true 的响应
  3. 您正在提交身份验证数据
  4. 你得到 authRequred:false
  5. 您正在调用 submitSuccess()
  6. WL 框架自动重新调用请求#1
  7. 您收到请求#1 的响应

安卓日志:

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 step的请求得到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;
            }
        });
    };
4

1 回答 1

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>
于 2014-10-10T06:56:05.400 回答