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

时间:2013-09-24 02:33:41

标签: ios xcode ibm-mobilefirst worklight-security

我们有一个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 Native API条目中。

在我们设置的原生iOS应用/项目中:

  • 捆绑ID与混合项目中的完全相同,与Apple Developer门户中的相同
  • 项目中已启用密钥链,并且还设置为 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。同样的结果,只是我们可以看到在 isCustomResponse 方法中打印的错误响应,如果我们有ChallengeHandler。

此外,会自动显示一个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中,当我们将它用于部署到Tomcat上的Consumer Server的Studio 6.0.0生成的iOSApi Environment时,它似乎没有显示相同的错误。

现在我们得到了一个:

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

当我们有Enabled, blocking时,我们可以在更改为Enabled, servicing时连接并调用适配器。 (之前的5.0.6错误是不可能的)

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

有人可以帮助我们完成在XCode 5项目中设置iOS本机应用程序真实性以成功连接到服务器所需的步骤,然后使用Enabled, blocking调用我们的适配器。

  • 我们确实将 worklight.group 添加到iOS应用的已打开的 Keychain Sharing 功能中。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 在构建设置下&gt;链接&gt;其他链接标志
  • 添加标记-ObjC

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