使用 MVC 为 iPhone 应用程序构建 RESTful API - 如何保护它?
Posted
技术标签:
【中文标题】使用 MVC 为 iPhone 应用程序构建 RESTful API - 如何保护它?【英文标题】:Building RESTful API with MVC for an iPhone app - How to secure it? 【发布时间】:2011-08-27 11:26:57 【问题描述】:我将为第三方供应商构建的 iPhone 应用程序编写服务。
我将使用 ASP.NET MVC 来接受帖子并返回 JSON 格式的数据。
我的问题是,您如何保护它?
也许只是使用 API 密钥?这是否足以确保只允许来自 iPhone 应用程序的数据访问指定服务?
【问题讨论】:
【参考方案1】:我自己也在为同样的概念苦苦挣扎。我认为第一件事是只做 HTTPS,这样一开始就比不做更安全。
接下来,这取决于您将如何进行身份验证。如果您只需要一个 API 密钥(以跟踪哪个实体正在访问数据)应该没问题。如果您还想跟踪用户信息,则需要某种方法来关联特定 API 密钥可以访问特定类型的记录,基于某处的连接。
我正在考虑在我的应用程序上进行表单身份验证,并使用身份验证 cookie。幸运的是,IIS 上的 ASP.NET 可以为您完成很多繁重的工作。
示例时间:(我确信我需要对此添加更多内容,但是当我在工作时,它会提供一些东西来啃)
表单验证: 在表单正文中发送一对(或更多)字段。这是一个彻头彻尾的 POST。没有多少不可逆的散列可以保证这一点。为了保护它,您必须始终处于防火墙后面以防所有入侵者(是的),或者您必须通过 HTTPS。很简单。
基本身份验证: 通过线路发送一个 base64 编码的“用户名:密码”字符串作为标头的一部分。请注意,base64 用于固定,就像纱门固定在潜艇上一样。您不希望它不安全。 HTTPS 是必需的。
API 密钥: 这表示应用程序应该是 XYZ。这应该是私人的。这与用户无关。最好是在请求 API 密钥时,与 API 授予者共享一个公共密钥,允许 API 密钥在传输时进行编码,从而确保它保持私有但仍然证明来源是他们的身份。这可能会变得复杂,但是因为有一个应用程序进程并且因为它不会从供应商那里改变,所以这可以通过 HTTP 完成。这并不意味着 per-user,这意味着 per-developing-company-that-uses-your-api。
因此,您希望对于访问您的数据的应用程序,您希望确保它是授权应用程序,您可以使用私钥进行协商,以便在运行时进行签名。这可确保您正在与要与之交谈的应用程序交谈。但请记住,这并不意味着用户就是他们所说的那样。
但是。
您可以使用 API 密钥和相关的公钥/私钥对用户名和密码信息进行编码,以便使用 HTTP 通过网络发送它们。这与 HTTPS 的工作方式非常相似,但您只是加密了消息的敏感部分。
但要让用户跟踪他们的信息,您将不得不根据基于用户的登录来分配令牌。所以让他们登录,使用适当的系统通过网络发送数据,然后将一些代表用户的唯一标识符返回给应用程序。然后让应用程序在您每次执行用户特定任务时发送该信息。 (通常一直)。
通过网络发送它的方式是告诉客户端设置一个 cookie,而我见过的所有 httpClient 实现都知道,当它们向服务器发出请求时,它们会发回服务器拥有的所有 cookie曾经设置过仍然有效。它只是发生在你身上。因此,您在服务器上的响应中设置了一个 cookie,其中包含您与客户端通信所需的任何信息。
HTH,问我更多问题,以便我们进一步完善。
【讨论】:
那么表单身份验证会将身份验证 cookie 传递给 iPhone 应用程序吗? 当然。这一切都由 HTTP(S) 传输机制处理。当然,您需要在 iPhone 应用程序中专门捕获它,但听起来好像其他人正在这样做。只需告诉他们您是如何进行身份验证的,然后让他们解决。 如果应用程序也需要对用户进行身份验证怎么办?就像该应用程序是否可以让用户登录和编辑个人资料一样。 @JackMarchetti ~ 再试一次。看起来怎么样?它是否可以帮助您确定近期的去向? 是的,这就是为什么它通常不适合基于浏览器的使用,但更多的是您通常可以确定客户端不会是完整的家伙。例如,可能有人使用您的 API 来构建应用程序。我通常会考虑以某种形式或方式由其他开发人员使用 API 密钥。想想你授权应用程序的 OAuth,他们在他们的数据库中存储一个令牌。然后他们会假装是你。您所做的所有授权,您只是授予他们使用该密钥的权限。【参考方案2】:一种选择是使用表单身份验证并使用身份验证 cookie。此外,请确保所有服务调用都通过 SSL 发送。
【讨论】:
那么将 auth cookie 传递回 iphone 应用程序? 是的,让 iphone 应用程序保留表单 cookie。这将是最简单的选择,因为您已经在使用 iis/asp.net 而无需重新发明自己的自定义安全性。以上是关于使用 MVC 为 iPhone 应用程序构建 RESTful API - 如何保护它?的主要内容,如果未能解决你的问题,请参考以下文章
为 2.2.1 构建时可以使用 iPhone 3.0 符号吗?
如何使用当前的 Xcode 为 iPhone OS 3.1.2 构建应用程序?
Flutter,为 IOS 构建:在 Iphone 上看不到登录页面
为使用PhoneGap 构建的iPhone 应用程序加速jQuery Mobile 1.1 中的页面转换?