对于使用Facebook iOS SDK的混合SSO场景,为我们自己的自定义用户记录生成密码/密钥的最佳方法是什么?

Mon*_*key 14 facebook ios

所以我的目的是在我的iOS应用程序中登录,允许我们的标准电子邮件/密码注册,或登录Facebook.我们还创建了休息服务来获取给定用户的应用信息,例如https:// url/getPosts/[userId]?userPwd = foo

我之前在Web应用程序中使用fb实现了SSO,但我对iOS客户端方案中的身份验证安全性有些担忧.与我之前所做的主要区别在于,在Web应用程序中,我正在使用服务器对服务器调用Facebook来获取访问令牌,因此我可以确信用户已经过身份验证,并且Web服务器进行了特权调用数据库.在iOS的情况下,我有移动客户端应用程序自己进行Facebook iOS身份验证请求,服务器必须以某种方式相信客户端应用程序中的这个用户确实根据我们数据库中匹配的用户记录进行了身份验证.

我的问题是如何从iOS SDK生成持久且秘密的唯一密钥,以便我可以在数据库中创建匹配的用户记录并将其与仅通过Facebook进行身份验证的用户相关联.我希望这是无缝的,因此用户不必手动填写另一个表单,我们只需在数据库中自动创建匹配的用户记录.

当他们使用Facebook fbDidLogin时,我可以将记录插入到我自己的用户表中,使用Facebook Id作为唯一标识符,将fb访问令牌作为我自己的用户记录的伪密码/密钥.我必须使用Facebook验证访问令牌以确保它在将其保存为用户密码之前是有效的(用户永远不会看到此密码,它将在api调用期间由客户端应用程序传递).这样,当用户通过iPhone应用程序调用我们自己的rest api时,我们可以使用这个secret/pwd/key进行身份验证和授权.

使整个问题变得没有问题的另一种方法是只处理客户端应用程序上的授权逻辑,并在调用我们自己的api之前检查是否存在有效的fb会话,我只用一个应用程序范围的秘密来保护它,但是这似乎并不安全,因为获得一个秘密会授权所有用户的数据.我宁愿在单个用户级别进行授权.这是正确的选择吗?我是否对iOS安全感到偏执?

fb访问令牌过期,因此可能看起来不耐用,但是如果我启用脱机访问,则令牌不会过期但会创建一个更可怕的oauth对话窗口.访问令牌的替代方法是在iOS客户端上使用应用程序密钥对fb Id进行哈希处理,并将其用作我们数据库中的Facebook用户密码.但是,这又是一个单一的密钥,可能是从iOS客户端应用程序反向编译的?

cho*_*bin 13

在iOS应用程序中设计Facebook身份验证,该应用程序也可访问安全的Web服务

这篇文章让我更加不受欢迎.如果我没有弄错的话,流程是这样的:

  1. 用户在iOS应用中进行身份验证
  2. iOS应用程序采用身份验证令牌,将其发送到rails应用程序
  3. Rails应用程序采用身份验证令牌并将其发送到graph.facebook.com/?auth_token=XXX,以便在身份验证成功时取回用户.
  4. Rails应用程序获取用户信息并在自己的数据库表中匹配/创建用户.将某种身份验证密钥发送回iOS应用程序.
  5. iOS应用程序保存身份验证密钥,以便它可以使用它与rails应用程序进行通信.

如果我错过任何东西,请告诉我.