【问题标题】:Feasibility of iOS App using Windows Azure Service Management API?iOS App 使用 Windows Azure 服务管理 API 的可行性?
【发布时间】:2012-06-13 14:43:55
【问题描述】:

我一直在努力设置一个利用服务管理 API 的 iOS (Objective-C) 应用程序。我已经成功地让存储 API 调用正常工作,但从我所读到的内容来看,两个 Azure API 之间的一大区别似乎是身份验证问题。作为参考,我最理想的做法是设置一个简单的 API 调用来列出应用中的托管服务帐户(最终面向公共部署)。

根据 API Azure 文档,服务管理 API 需要上传管理证书 (.cer),然后客户端才能利用该证书对请求进行身份验证。我的预感是,这将阻止像我想要创建的应用程序以任何方式可行,因为具有包含已下载应用程序的设备的公共用户将不具有该证书或以编程方式将其附加到目标 c 中的能力代码。

我的预感正确吗?这是一个不应该追求的荒谬想法吗?我认为要做到这一点,用户需要以某种方式将其设备的证书文件上传到 Azure,然后以某种方式让应用程序使用该证书进行身份验证。即使有可能,我什至不知道从哪里开始。 :(

任何有用的信息将不胜感激。我在 iOS 方面有很多经验,但特别是在这种类型的身份验证/证书方面,不幸的是我的经验很少。

提前致谢!! -文森特

【问题讨论】:

    标签: objective-c ios ssl azure https


    【解决方案1】:

    实际上,我有一个应用程序可以完全满足您的要求。 CloudTools for Windows Azure 是一个 iOS 应用,它使用 Azure 管理服务 API 来执行 Azure 管理。它在 iTunes 上已经存在一年多了。

    您的问题有点宽泛,但我可以告诉您,证书问题是迄今为止设计/开发应用程序中最大的问题。您不能将证书存储在钥匙串中,因为钥匙串的工作方式如下:a)您请求需要证书的远程 URL; b)该网址告诉您它需要证书,并且 c)钥匙串提供了适当的证书。这是一个多请求过程。这不会适用于 Azure,因为 Azure 服务管理 API 期望初始调用包含证书。

    我要求用户通过 iTunes 文件共享 (steps here) 添加他们的证书。当然,他们必须将公钥部分上传到 Azure。然后,我为每个请求提供证书和私钥。我使用 HTTP 库 ASIHttpRequest,尽管我相信最新的 (iOS 5.x) Apple 库具有类似的功能。

    如果您有任何后续问题,我很乐意提供更多详细信息。

    【讨论】:

    • 非常有用的信息,克里斯!非常感谢你!我也在使用 ASIHttpRequest,因为我喜欢将证书附加到请求的给定方法。仅出于测试目的,我想看看如果我只是将 .cer 文件嵌入到 app/bundle 中,是否可以让它工作。因此,当我尝试将证书的 NSData 转换为 ASIHttpRequest 所需的 SecIdentityRef 格式时,我发现进行此转换的所有代码都无法正常工作(我尝试了 Apple 的代码以及其他代码)。您对在哪里进行简单的转换有什么建议吗?再次为您提供帮助!
    • 作为后续,别担心,我不打算发布竞争应用程序或其他任何东西。 :) 这仅供内部使用;只是想澄清一下。你的应用看起来很棒,顺便说一句!出色的工作
    • 我认为您可能正在使用 Azure 发布设置操作生成证书,对吧? windows.azure.com/download/publishprofile.aspx 实际上,我从来没有让这些证书工作。按照以下步骤创建您的证书msdn.microsoft.com/en-us/library/windowsazure/gg432987.aspx,您应该没问题。如果这不起作用,请告诉我,我会发布一些 iOS 代码。
    • 完美,让它工作。我也使用 .cer 文件而不是 .pfx 文件。就我而言愚蠢。再次感谢你的帮助!很有帮助。
    • 是的,当您开始使用证书时会感到困惑。 .cer 文件是您的“公钥”。您的 .pfx 文件是您的公钥 + 私钥。也就是说,pfx 文件包含您的 .cer 文件,以及密码的加密表示。
    【解决方案2】:

    对于 Windows Azure,如果您使用的是服务管理 API,那么您确实需要基于证书的身份验证,以便在请求连接的计算机和 Windows Azure 管理门户之间创建 SSL 隧道。我不确定您的 iOS 应用程序分布范围有多广。

    我的第一个想法是,您为什么要从 iOS 应用程序部署 Windows Azure 应用程序,您要在 iOS 设备中构建应用程序并进行部署吗? Windows Azure 应用程序部署主要在客户端计算机上完成,因此,iOS 上的 Azure 应用程序管理是个好主意,但是从 iOS 部署应用程序不知道为什么。可能是你在这里做大事。在这两种情况下,你都需要 iOS 设备上的服务管理证书。如果是企业应用,可以让用户安装Service Management证书,iOS设备使用Service Mgmt API会更方便。

    因此,如果您想从客户端 iOS 应用程序使用服务管理 API,我认为最好的解决方案是将 WCF 服务托管在 Windows Azure 中,该服务被配置为直接连接到您的 Windows Azure 门户。从您的 iOS 应用程序中,您只需调用您的 WCF 服务。这是从任何客户端应用程序(WP7、iOS、Android)访问服务管理 API(通过 WCF 服务)的非常流行的方法,并且客户端代码非常轻量。另一方面,您可能需要付费才能在 Windows Azure 上托管 WCF 服务。

    【讨论】:

    • 感谢您的回答!这正是我的想法。这样做的目的实际上并不是为了部署,而是更多地用于监控、统计和一些轻量级操作,例如交换等。我想象你是正确的,WCF 服务可能是这种类型的唯一方法事物。非常感谢您对此的回答!
    • 很高兴为您的问题增加一些价值!如果你喜欢这个答案,别忘了接受。
    • 接受! :) 我还有一个额外的后续问题,但这更多是在 Objective-C 方面。假设我要生成 Azure 管理证书,将其加载到我 iPhone 上的配置文件/钥匙串中,然后加载应用程序,是否可以从 Objective-c 代码访问它以便将其用于 Azure 目的?我一直在阅读很多关于如何在 iOS 设备上提取钥匙串中的内容的文档,但我对指示从何处开始将这些信息用于此类 API 调用的资源一无所知。跨度>
    • 谢谢!!我没有 iOS 如何加载证书链的经验,但正常的过程是进行安全的 RESTful 调用(即服务管理 API)是您首先创建一个 SSL 隧道。要创建 SSL 隧道,您需要加载特定的私有密钥嵌入证书并使用它来连接服务端点,一旦证书被验证,SSL 隧道将建立并且进一步的 RESTful api 将覆盖它。
    猜你喜欢
    • 2012-08-28
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多