0

我一直在尝试实现和测试 Worklight 的应用程序真实性功能,但未能使其正常工作。我已经查看了该站点上的每个帖子,以及WL信息中心的信息,但没有成功。我正在详细解释我所做的事情以及我看到的结果,希望有人能够帮助我。

环境:Worklight Studio 5.0.5 Consumer edition 安装在 Windows 7 Enterprise 上 Worklight Server 5.0.5 Consumer edition 安装在 Windows 7 Enterprise

WL Server 正在 Worklight Server 安装提供的 Websphere Application Server Liberty 概要文件中运行

WL Server 使用的是安装包提供的 derby 数据库。

实施步骤:

  1. 在 authenticationConfig.xml 中添加(取消注释)安全测试

    <mobileSecurityTest name="mobileTests"> 
        <testDeviceId provisioningType="none"/>
        <testAppAuthenticity/>
        <testUser realm="wl_anonymousUserRealm"/>
    </mobileSecurityTest>
    
  2. 重新构建 .war 文件并将其部署到 Worklight Server。

  3. 修改 initOptions.js 使“connectOnStartup : true”

  4. 修改application-descriptor.xml,指定Android应用的安全测试,添加publicSigningKey

    <android version="1.1" securityTest="mobileTests">
    <worklightSettings include="false"/>
    <security>
        <encryptWebResources enabled="false"/>
        <testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/>
        <publicSigningKey>.......</publicSigningKey>
    </security>
    

  5. 重新构建应用程序并将其部署到 WL 服务器。

  6. 创建签名的 .apk 文件并上传到应用中心。

  7. 在物理设备上安装应用程序(Samsung Galaxy Tab 2,Android 4.1.1)

  8. 启动应用程序。

当我从 WL 控制台或在物理设备上以“预览”模式启动应用程序时,我最终会显示相同的错误。我收到的错误是:

{"errorCode":"UNEXPECTED_ERROR","errorMsg":"userIdentityForAPI 为空。检查您的应用程序的身份验证要求(从不、onStartup、onDemand)。这些设置必须与部署的应用程序匹配"}

我的配置中有什么遗漏吗?

4

1 回答 1

0

使用最新的 Worklight Studio Consumer Edition 插件 v6.0.0.1,我完成了以下操作。我已经成功地在 Android 环境中基于 Worklight 的应用程序中使用了 App Authenticity。

  1. 创建了一个新的 Worklight 项目
  2. 添加了安卓环境
  3. initOptions.js >connectOnStartup:true
  4. authenticationConfig.xml > 取消注释 mobileSecurityTest:

    <mobileSecurityTest name="mobileTests">          
        <testAppAuthenticity/> 
        <testDeviceId provisioningType="none" />  
    </mobileSecurityTest>
    

    也可以使用自定义安全测试:

    <customSecurityTest name="customTests">
              <test realm="wl_antiXSRFRealm" step="1"/>
              <test realm="wl_authenticityRealm" step="1"/>
              <test realm="wl_remoteDisableRealm" step="1"/>
              <test realm="wl_anonymousUserRealm" isInternalUserID="true" step="1"/>
          test realm="wl_deviceNoProvisioningRealm" isInternalDeviceID="true" step="2"/>
     </customSecurityTest>
    
  5. 使用了 Google 提供的默认 debug.keystore(在生产环境中,应使用您自己的密钥库)

  6. 通过右键单击 Android 文件夹 > 提取公共签名密钥(自动添加到 application-descriptor.xml)使用此密钥库
  7. 全部构建并部署
  8. 右键单击生成的Android项目>运行方式> Android应用程序(在生产环境中,右键单击生成的Android项目> Android工具>导出签名的应用程序包>安装签名的.apk>启动)

验证:

  1. 当在 Worklight Console 中将 App Authenticity 规则设置为“启用”时,检查该应用程序是否成功连接到 Worklight Server
  2. 更改 application-descriptor.xml 中的公共签名密钥并重新部署到服务器
  3. 当在 Worklight Console中设置 App Authenticity 规则时,检查应用程序现在是否无法连接到 Worklight ServerEnabled, blocking
  4. 如果设置为,则检查应用程序是否通过Enabled, serving
  5. 如果设置为,则检查应用程序是否通过Disabled

在我的测试中:

  • 我在 Windows 7 中使用了 Worklight Studio Consumer Edition(带有嵌入式 Liberty 应用程序服务器),而不是您将 Worklight Server 部署到的单独应用程序服务器。只要完成上述相同的步骤(稍作改动 - 还需要部署 .wlapp),我看不出有任何区别......
  • 确保您正确获取了密钥库部分;也就是说,在服务器和应用程序中使用相同的密钥库。
于 2013-11-05T09:00:15.387 回答