2

我不确定如何正确解决这个问题,但我知道我在这里很困惑。我并不是要您为我编写代码或提供脚本,我所要求的只是指导。

我已经设置了一个 API(用 PHP 构建的框架)来为应用程序提供资源,主要是 iOS 和 Android。我还阅读了有关 Amazon REST API、Facebook oAuth、Twitter xAuth 等的实现。我关心的是从应用程序的角度来看的身份验证(可能是加密) 。

因此,最初,用户将下载该应用程序然后安装它。用户在应用程序中看到的第一件事是登录页面:用户名密码。用户填写后提交。这就是我的问题所在。我担心应用程序如何将用户名和密码传递给 API。当然,凭据必须加密,以便我可以在服务器上对其进行解密,但我对具体过程感到困惑。

我不是移动开发人员,所以也许这就是我对这个过程一无所知的原因。请赐教。

编辑:

登录时的用户名和密码不是用于访问 API 的凭据,而是他帐户的凭据,因此 API 知道用户是否有效,然后返回其个人资料的详细信息。

4

4 回答 4

1

除了滚动您自己的身份验证之外,您可能还想利用其他登录提供程序,例如 Facebook 和 Twitter。这将要求您在这些提供程序中设置应用程序配置,以重定向回您的应用程序。https://softwareengineering.stackexchange.com/questions/78587/facebook-and-twitter-authentication-from-mobile-applications

我还在 REST 中的身份验证基本指南上找到了此页面 - http://www.infoq.com/news/2010/01/rest-api-authentication-schemes

于 2013-02-14T09:00:05.080 回答
1

当然,这取决于您对安全性的需求,处理汇款的银行将进一步扩展以提供安全性,但总的来说,以下内容至少应该为您的 API 提供安全性,以防任何不会花费数百小时的人它或者是专业黑客;

首先,您可以通过 https 进行通信,这几乎不需要您付出任何努力。其次,您可以使用只有您和您的 API 知道的散列和盐(在其之前和/或之后的随机字符,包括散列之前的盐)对密码进行散列。你不解密它 - 你没有理由知道某人的密码,即使是管理员。实际上,如果你使用一些标准的东西,比如 MD5 或 SHA1,你甚至无法解密它。您可以简单地比较 hashed+salted 值以了解是否允许某人登录。

我想你可以对用户名做同样的事情,但不是必须的。

再说一遍:这不是完全证明的反黑客和安全方法,但它可以满足大多数 API 的安全需求。

于 2013-02-14T08:45:57.743 回答
0

许多应用程序使用 HTTP 身份验证来使用 API - HTTP 基本就是它所说的,非常基本且不是很安全。更好的是使用 http-auth,它可以安全地使用用户名和密码来保护通信。

基本上你只需要配置你必须使用 http-auth 进行 API 调用的任何服务器,并确保它知道你的帐户。

在 iOS 端,使用像 AFNetworking 这样的库来处理与服务器的通信,您可以向库传递用户名/密码以用于验证调用。

我还建议将用户名/密码存储在应用程序钥匙串中,这样用户就不必每次都输入它。

于 2013-02-14T08:54:34.270 回答
0

正如其他人所说,您可以使用哈希算法(如 MD5)对密码进行哈希处理。请注意,这不是加密,而是散列。您无需将明文密码发送到服务器(或存储它,您存储哈希)。您没有说明用户可以如何以及在何处创建他们的帐户,但您需要确保用于创建密码哈希的算法是相同的。

于 2013-02-14T09:09:44.260 回答