【问题标题】:Provide secure Facebook authentication with my Server使用我的服务器提供安全的 Facebook 身份验证
【发布时间】:2013-01-22 10:50:09
【问题描述】:

我想构建一个小型移动应用程序(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 库吗?

【问题讨论】:

    标签: android ios facebook rsa digital-signature


    【解决方案1】:

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

    2) 是的。双向加密。

    3) 这很难。这称为远程证明。这有很多问题。

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

    • 你在保护谁?

    • 我愿意投资多少?

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

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

    您可以阅读远程证明herehere

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

    附:关于 RSA 库。

    看看这个安卓系统:

    Asymmetric Crypto on Android

    这适用于 iOS

    RSA Encryption using public key

    【讨论】:

    • 1.带有客户端证书的 TLS 是您第三点的实现吗? 2. 另外,我们为什么需要这个?我的意思是,如果有人提供了某个用户的凭据(FB 令牌或登录名和密码),那么我们可以授权它访问该用户的帐户,而这个应用程序是谁的没有区别。除非应用程序本身的存在授权客户端在服务器上执行某些操作。那么,这种保护是否仅限于这种情况?
    猜你喜欢
    • 2015-03-15
    • 2016-10-24
    • 2011-12-07
    • 1970-01-01
    • 2011-08-22
    • 2017-09-29
    • 2021-01-06
    • 2016-05-17
    • 2011-02-25
    相关资源
    最近更新 更多