19

我想构建一个小型移动应用程序(Android 和 iOS)和一个带有 REST Api 的小型后端服务器。

我的应用程序用户(Android 或 iOS)需要登录 facebook。我通过使用 facebooks mobile sdk 来做到这一点。登录成功后,facebook sdk 将返回一个 authentificationToken,它现在在用户的智能手机上。

这个想法如下:每当我的应用程序需要一些数据时,该应用程序将通过 HTTPS 连接到我的服务器后端 (REST)。例如:应用程序生成一个简单的 HTTP GET 并传递检索到的 Facebook authenticationToken。我的服务器获取此 facebook authenticationToken 并使用此令牌来确定用户是否经过身份验证并检索 facebook 个人资料信息(名字、姓氏等)。因此服务器也联系 facebook 并为 HTTP GET 请求生成个性化响应。

我的问题是:

  1. 是否真的足以为每个 REST API 调用传递这个 facebookAuthentication 令牌,以使服务器检索正确的关联 facebook 用户?
  2. 我使用HTTPS,所以我想,连接已经足够加密了,对吧?
  3. 我想我需要一些签名机制,因此对每个 REST API 调用(通过 HTTPS)进行签名,以确保 facebookAuthentication 令牌仅从我的移动应用程序发送。我会通过使用带有 SHA-1 的 RSA 来签署任何 REST API 调用来做到这一点。但是这种方法的问题是:客户端需要将私钥存储在 App 中的某个位置(用于签名请求),而服务器知道公钥(用于签名匹配)。它是否正确?如果是,我想这是一个很大的安全问题,因为可以反编译移动应用程序(尤其是 android)来获取私钥。如何将此私钥安全地存储在我的应用程序中?有没有其他可以推荐的签名系统?

Bt:你知道适用于 iOS 和 Android 的好的 RSA 库吗?

4

1 回答 1

8

1) 是的。够了。如果您的客户端(移动应用程序)具有令牌,则证明用户已通过 Facebook 身份验证。因此,您以这种方式对用户进行了身份验证。但是,仅对移动应用程序进行身份验证是不够的(关于这一点,我将在 #3 中讨论)。

2) 是的。它是双向加密的。

3)这是一个艰难的。这称为远程证明。这有很多问题。

在你进入这个方向之前,你需要问自己两个问题

  • 你在保护谁?

  • 我愿意投资多少?

如果您要保护自己免受知识非常有限的学生的侵害,他可能会编写另一个将使用您的服务器的移动应用程序,那么您可以使用签名。

如果您只是防范更复杂的软件工程师(他们可以对您的应用程序进行逆向工程) - 这还不够。该工程师可以从您的应用程序中提取私钥,并使用它来签署他的应用程序中的请求。

您可以在此处此处阅读有关远程证明的信息。

可以保护您免受简单逆向工程的解决方案非常复杂。

PS关于RSA库。

看看这个Android:

Android 上的非对称加密

这适用于 iOS

使用公钥的 RSA 加密

于 2013-01-24T17:49:32.273 回答