0

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

403 (Forbidden)
TypeError: Object # has no method 'handleFailure'
我在通过 chrome 中的控制台测试应用程序的 Web 版本时收到此错误。

在 iPhone 版本的应用程序上进行测试时,我也遇到了类似的错误。 例外。TypeError:“未定义”不是函数(评估“handler.handleFailure(wlFailure [realm])”)

查看 AbstractChallengeHandler 类/函数中的 wlclient.js 文件,我没有看到用于解释上述错误的 handleFailure 函数定义。我认为应该有一个handleFailure 的定义,或者是否需要更多配置来使用标头身份验证保护适配器资源?

我问这个问题的原因是,我试图在我创建的客户端“ChallengeHandler”中测试我的逻辑,我试图理解为什么我无法通过正常的客户端challenge.isCustomResponse/challenge.handleChallenge 通信。

代码/配置如下

任何建议/意见表示赞赏

身份验证配置.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>

HeaderAuthRealmChallenge.js

    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');
    };
4

1 回答 1

1

目前缺少这方面的文档,应尽快更新。

我认为您使用的身份验证器不支持常规 ChallengeHandler,而是使用 WLChallengeHandler。

这是有关此文档的预览:

WL.Client.createWLChallengeHandler() API

此方法创建一个质询处理程序对象来处理由 Worklight Server 发送的质询。WLChallenge 处理程序仅适用于基于 Worklight 身份验证协议的身份验证领域,即服务器端身份验证器实例扩展 Worklight 提供的身份验证器之一,例如 WorklightProtocolAuthenticator 或 UsernamePasswordAuthenticator,或直接实现 WorklightAuthenticator 接口。

每个领域只能有一个挑战处理程序。要遵守 Worklight 身份验证协议,领域接收的质询必须是 JSON 对象。

参数 realmName – 在 authenticationConfig.xml 配置文件中代表质询的领域名称。使用此名称来标识需要身份验证的领域。

创建 WLChallengeHandler 时,必须实现以下方法:

  • handleChallenge() - 当 Worklight Server 返回领域的质询时调用此方法。
  • processSuccess() - 当 Worklight Server 报告认证成功时调用此方法。
  • handleFailure() - 当 Worklight Server 报告认证失败时调用此方法。
于 2014-04-08T07:18:44.983 回答