2013-01-22 43 views
19

我想建立一个小的移动应用程序(Android和iOS)和一个带有REST Api的小型后端服务器。提供与我的服务器安全的Facebook身份验证

我的应用程序用户(android或iOS)需要在Facebook上登录。我通过使用Facebook移动SDK做到这一点。当登录成功后,facebook sdk将返回一个authentificationToken,即现在在用户智能手机上。

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

我的问题是:

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

Bt:你知道iOS和Android的一个很好的RSA库吗?

回答

8

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

2)是的。它是两种加密方式。

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

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

  • 你是谁防范?

  • 我愿意投资多少钱?

如果你是保护自己对学生具有非常有限的知识,谁可以写另一个移动应用将使用你的服务器,那么你是罚款的签名。

如果您只是为了防止一个稍微复杂一点的软件工程师(谁可以对您的应用程序进行逆向工程) - 这是远远不够的。这位工程师可以从您的应用程序中提取私钥并将其用于在其应用程序中签署请求。

您可以阅读关于远程证明herehere

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

P.S.关于RSA库。

看看这个Android的:

Asymmetric Crypto on Android

而本作的iOS

RSA Encryption using public key