Ibm mobilefirst Worklight Security 403响应。缺少自定义安全域的方法handleFailure

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])”

我目前正在使用标头身份验证/登录模块开发Worklight 6.0 POC。尝试访问应用程序中受保护的适配器时,我在控制台中收到以下错误:

403(禁止)
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');
    };