IBM Worklight – 如何在本机iOS应用程序中启用应用程序真实性?

我们有一个iOS和Android混合应用程序环境,我们已经成功运行了应用程序真实性(使用下拉菜单控制function):

<mobileSecurityTest name="app"> <testAppAuthenticity/> <testUser realm="wl_anonymousUserRealm"/> <testDeviceId provisioningType="none" /> </mobileSecurityTest> 

我们在我们的Worklight项目中添加了一个“iOS Native API”项目,该项目用于我们在XCode 5中的本机iOS客户端开发。我们成功地能够连接到WL服务器,并调用我们不同适配器中的所有现有适配器过程。

对于这个本地API项目,我们现在也想启用App Authenticity。 当我们使用与本地API项目的应用程序描述符中的混合应用程序相同的MobileSecurityTest时 ,我们可以将其部署到我们的WL服务器,并且在iOS Native API条目处启用App Authenticityfunction(可以下拉以控制function)在控制台。

在我们设置的本机iOS应用/项目上:

  • bundle ID与混合项目中的完全相同,与Apple Developer门户中的一样
  • Key Chain在项目中启用,也设置为worklight.group (如混合XCode项目中)

当我们想要连接到WL服务器时,我们无法获得成功的身份validation。 我们看到DeviceAuthManager尝试从设备获取UUID,但是服务器返回错误响应:

 2013-09-24 08:58:35.530 App[32535:c07] DeviceAuthManager:getWorklightUniqueDeviceId --> returning UUID from the keychain 2013-09-24 08:58:35.564 App[32535:c07] isCustomResponse 2013-09-24 08:58:35.564 App[32535:c07] this is it: Status: 403 InvocationResult: (null) InvocationContext: { delegate = "<MyConnectionListener: 0x7d73ec0>"; } Response text: /*-secure- {"WL-Authentication-Failure":{"wl_authenticityRealm":{"reason":"com.ibm.json.java.JSONObject cannot be cast to java.lang.String"}}}*/ 2013-09-24 08:58:35.564 App[32535:c07] [ERROR] Worklight: -[WLRequest requestFailed:]:309::Status code='403' error='(null)' 2013-09-24 08:58:35.565 App[32535:c07] [ERROR] Worklight: -[WLClient onInitRequestFailure:userInfo:]:410:: 

我们没有注册的ChallengeHandler只是打印响应。 如果我们有ChallengeHandler,就可以看到在isCustomResponse方法中打印的错误响应。

此外,Worklight对话框会自动显示“错误:处理来自应用程序(CLOSE)的请求时遇到错误”

我们可以看到在6.0中有worklight.plist的值:

 <key>wlUid</key> <string>wY/mbnwKTDDYQUvuQCdSgg==</string> 

这在5.0.6中也是必要的吗? 我们的plist文件没有这个。

当我们将worklight.plist文件中的环境值从iOSnative为我们的应用程序名称(或其他)时,我们得到一个响应Response text:

 {"errorCode":"UNEXPECTED_ERROR","errorMsg":null} 

所以我认为这个价值iOSnative是一个固定的价值,必须在那里?



9月30日:WL 6.0.0.1更新

在WL 6.0.0.1中,当我们将一个Studio 6.0.0生成的iOSApi环境部署到Tomcat上的Consumer Server时,似乎没有显示相同的错误。

现在我们得到一个:

 Invocation Failure: Status: 403 InvocationResult: { "WL-Authentication-Failure" = { "wl_authenticityRealm" = { reason = "forbidden state"; }; }; } 

当我们Enabled, blocking ,我们可以连接和调用适配器,当我们改变为Enabled, servicing 。 (这在5.0.6之前的版本中是不可能的)

现在我们假设我们需要设置我们用来签署iOS模拟器的应用程序和Wl服务器上的iOS设备(开发人员和分发证书)的iOS证书或签名,以便WL服务器允许连接?

有人可以帮助我们完成我们需要在我们的XCode 5项目中设置iOS原生App Authenticity的步骤,以成功连接到服务器,然后使用Enabled, blocking来调用我们的适配器。

  • 我们添加了worklight.group到iOS应用程序的开启的钥匙串共享function。

  • 我们将包含plist文件的所有Wl iOSAPI文件与wlUid复制到iOS应用程序xCode5项目中?

  • 如上所述,它适用于Enabled-Servicing并且禁用了AppAuthenticity。

要使用适用于iOS的Worklight Native API在本机iOS应用程序中运行应用程序真实性,其步骤与Eclipse端的混合应用程序中的步骤相同:

  • authenticationConfig.xml设置securityTest
  • 将securityTest添加到iPhone环境application-descriptor.xml
  • 将你的bundleId添加到application-descriptor.xml的iPhone环境中

然而,在Xcode中还有一个额外的步骤。
一旦你打开生成的Xcode项目:

  • 在“构build设置”>“链接”>“其他链接器标志”下
  • 添加标志-ObjC

现在,您可以在iOS模拟器/设备上清理和/或运行项目。 应该pipe用。