Ibm mobilefirst Worklight Security 403响应。缺少自定义安全域的方法handleFailure
我目前正在使用标头身份验证/登录模块开发Worklight 6.0 POC。尝试访问应用程序中受保护的适配器时,我在控制台中收到以下错误: 403(禁止)Ibm mobilefirst Worklight Security 403响应。缺少自定义安全域的方法handleFailure,ibm-mobilefirst,worklight-security,challenge-response,Ibm Mobilefirst,Worklight Security,Challenge Response,我目前正在使用标头身份验证/登录模块开发Worklight 6.0 POC。尝试访问应用程序中受保护的适配器时,我在控制台中收到以下错误: 403(禁止) TypeError:对象#没有方法“handleFailure” 我通过chrome中的控制台测试应用程序的web版本时收到此错误 在iPhone版本的应用程序上测试时,我也会遇到类似的错误。 例外。TypeError:“undefined”不是函数(正在评估“handler.handleFailure(wlFailure[realm])”
TypeError:对象#没有方法“handleFailure” 我通过chrome中的控制台测试应用程序的web版本时收到此错误 在iPhone版本的应用程序上测试时,我也会遇到类似的错误。 例外。TypeError:“undefined”不是函数(正在评估“handler.handleFailure(wlFailure[realm])” 查看AbstractChallengeHandler类/函数中的wlclient.js文件,我没有看到解释上述错误的handleFailure函数定义。我假设handleFailure应该有一个定义,或者是否需要更多的配置来使用头身份验证来保护适配器资源 我问这个问题的原因是,我试图在我创建的客户端“ChallengeHandler”部分中测试我的逻辑,并且我试图理解为什么我无法通过正常的客户端challenger.isCustomResponse/challenger.handleChallenge通信看到这种类型的错误/响应 代码/配置如下所示 欢迎提供任何建议/意见 authenticationConfig.xml
<securityTests>
<webSecurityTest name="WebSecurityTest">
<testUser realm="HeaderAuthRealm"/>
</webSecurityTest>
<mobileSecurityTest name="MobileTest">
<testUser realm="HeaderAuthRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
<customSecurityTest name="HeaderAuth-securityTest">
<test realm="HeaderAuthRealm" isInternalUserID="true" />
</customSecurityTest>
</securityTests>
<realms>
<realm name="HeaderAuthRealm" loginModule="HeaderLoginModule">
<className>com.worklight.core.auth.ext.HeaderAuthenticator</className>
</realm>
</realms>
<loginModules>
<loginModule name="HeaderLoginModule">
<className>com.worklight.core.auth.ext.HeaderLoginModule</className>
<parameter name="user-name-header" value="HeaderAuth_USER"/>
</loginModule>
</loginModules>
目前缺少这方面的文档,应该很快更新 我认为您正在使用的验证器不支持常规ChallengeHandler,而是使用WLChallengeHandler 以下是有关此的文档预览: createWLChallengeHandler()API 此方法创建一个质询处理程序对象来处理质询 由Worklight服务器发送的。挑战处理程序可以工作 仅使用基于Worklight的身份验证域 身份验证协议,即服务器端 验证器实例扩展了提供的一个Worklight 验证器,如WorklightProtocolAuthenticator或 UsernamePasswordAuthenticator,或直接实现 WorklightAuthenticator接口 每个领域必须只有一个挑战处理程序。遵守 Worklight身份验证协议,该领域面临的挑战 receives必须是JSON对象 Parameters realmName–表示 质询,位于authenticationConfig.xml配置文件中。使用 此名称用于标识需要身份验证的领域 创建WLChallengeHandler时,必须实现以下功能 方法:
- handleChallenge()-当Worklight服务器返回领域的质询时,调用此方法
- processSuccess()-当Worklight Server报告身份验证成功时调用此方法
- handleFailure()-当Worklight Server报告身份验证失败时调用此方法
我想你应该实施手动故障…谢谢你的回复。您能否指出worklight 6.0文档中明确解释了这一点。@Gersty-我怀疑您收到的错误不是来自质询处理程序代码,而是来自调用适配器的客户端代码。例如,在WL.client.invokeProcedure()调用中,您可能指定了一个onFailure处理程序'handleFailure',但没有实现该函数。
var HeaderAuthRealmChallenger = WL.Client.createChallengeHandler("HeaderAuthRealm");
HeaderAuthRealmChallenger.isCustomResponse = function(response) {
if (response.responseJSON.isSuccessful) {
WL.Logger.info('AUTHENTICATION SUCCESS =).......');
return false;
}else{
return true;
}
};
HeaderAuthRealmChallenger.handleChallenge = function(response){
WL.Logger.info('AUTHENTICATION FAILED =(.......');
$('#login').css('display','block');
};