IBM Worklight:基于适配器的身份验证成功后未获得响应
Posted
技术标签:
【中文标题】IBM Worklight:基于适配器的身份验证成功后未获得响应【英文标题】:IBM Worklight: Not get response after adapter-based auth successfully 【发布时间】:2014-09-09 14:58:18 【问题描述】:Worklight Studio 6.0.0.2;工作灯服务器 6.0.0; android 上的混合应用;
最近,我发现基于 Worklight 适配器的身份验证的另一个奇怪行为。如果我一开始就通过了身份验证,然后在后台运行应用程序,则下面的 #7 步骤不会发生在我身上(以下 7 个步骤是安东的一个答案的副本)。 Worklight 会话过期后,将应用程序返回到前台。此时,第一个请求在WL服务器重新认证时不会得到响应。
-
您正在向服务器发出请求#1(比如说调用过程)
您收到了 authRequired:true 的响应
您正在提交身份验证数据
你得到 authRequred:false
您正在调用 submitSuccess()
WL 框架自动重新调用请求#1
您正在收到对请求#1 的响应
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 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;
);
;
【问题讨论】:
为什么不添加实际的适配器实现和质询处理程序代码而不是步骤?这样,它可以在某种程度上被调试...... 您也没有链接到安东为您提供的任何答案。 安东回答的链接:***.com/questions/21770854/… 您也可以显示您的适配器代码吗? AuthAdapter 和您尝试访问的原始适配器... 【参考方案1】:我的团队通过更改 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>
【讨论】:
以上是关于IBM Worklight:基于适配器的身份验证成功后未获得响应的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.1.0.1,基于 2 个适配器的身份验证出现问题
IBM Worklight 6.1 - 任何实现基于 SSO 的身份验证的参考资料?
IBM Worklight 6.0 - 如果客户端注销/登录,具有基本身份验证的适配器不会更新身份验证标头
向 IBM Worklight 添加虚拟身份验证以创建新会话
IBM Worklight:WL.Client.getUserName 无法在身份验证后立即检索 userIdentity