0

我们有一个 iOS 和 Android 混合应用程序环境,在其中我们成功运行了 App Authenticity(下拉菜单可用于控制该功能),使用:

<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 本机 API 条目处启用应用程序真实性功能(可用于控制该功能的下拉菜单)在控制台中。

在本机 iOS 应用程序/项目上,我们设置:

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

当我们想要连接到 WL 服务器时,我们无法成功运行身份验证。我们看到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为我们的应用程序名称(或其他名称)时,我们会得到一个响应响应文本:

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

所以我假设这个值 iOSnative 是一个必须存在的固定值?



9 月 30 日:WL 6.0.0.1 更新

在 WL 6.0.0.1 中,当我们将它与 Studio 6.0.0 生成的 iOSApi 环境一起使用时,它似乎没有显示相同的错误,该环境部署到 Tomcat 上的消费者服务器。

现在我们得到一个:

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 应用程序的打开的钥匙串共享功能中。

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

  • 如上所述,它适用于 Enabled-Servicing 和 Disabled AppAuthenticity。

4

1 回答 1

0

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

  • 在中设置 securityTestauthenticationConfig.xml
  • 将 securityTest 添加到 iPhone 环境中application-descriptor.xml
  • 将您的 bundleId 添加到 iPhone 环境中application-descriptor.xml

然而,还有 1 个额外的步骤要做 - 在 Xcode 中。
打开生成的 Xcode 项目后:

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

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

于 2013-12-05T17:45:36.583 回答