【问题标题】:FB Authentication in iphone app and third serveriPhone 应用程序和第三台服务器中的 FB 身份验证
【发布时间】:2012-08-17 18:22:17
【问题描述】:

我的公司正在开发一个如下工作的系统:

有一个 iphone/mobile 应用程序和一个提供休息服务的 php 服务器。

在移动应用中,用户可以通过两种方式注册/登录:

  1. 用户名/密码对
  2. 脸书帐号

虽然第 1 点很清楚,但我对第 2 点有困难:

据我了解,顺序应该是这样的:

1 - 应用程序向 fb 发送用户数据,然后 fb 以某种我不在乎的方式对用户进行身份验证并回答“好的,是你”。 2- 应用程序现在必须向 php 服务器请求一些用户数据。

用户在应用中使用 fb 登录后,如何验证服务器和应用之间的通信?

我不能只问“向我发送用户 fbid 的数据”,因为任何人都可以检索到一个简单的请求。

【问题讨论】:

  • 使用 fb graph api 可以获取 fb 用户 id 、姓名、头像等信息.. 可以使用 DB 存储这些信息并与服务器通信吗?
  • 是的,但我不明白通信部分。我的意思是:假设所有内容都存储在数据库中。当应用程序请求数据时,服务器如何验证允许该请求的事实?我应该向服务器提交一些可以识别我的东西,但是服务器可以识别的东西,如果我只提交 fbid,任何 php 脚本中的任何人都可以尝试随机 fbid,直到它得到一个
  • 另外,当应用程序在 fb 中对用户进行身份验证时,我必须将用户数据保存在服务器数据库中。所以应该有从应用程序到服务器的数据传输。即使在这种情况下我也有同样的问题

标签: php ios authentication restful-authentication


【解决方案1】:

这就是您使用“密钥”(Facebook 设置的一部分)的原因。

当用户通过您的应用登录时,他们同意与您的应用共享信息并获得一个令牌 - 该令牌是一个会话 ID。该会话 ID 只能由该用户在您的应用中通过该手机使用 - 除非您拥有“密钥”。

然后电话将该会话 ID 传递给服务器。

然后服务器将令牌连同密钥一起传递,Facebook 将向服务器返回与手机用户相同的信息。这就是它的身份验证方式。

没有密钥的任何其他人(除了手机上的用户),令牌都是无用的。

【讨论】:

  • 这是否意味着所有用户共享同一个私钥,即应用程序机密?而且所有的交易都是用一个私钥-公钥系统进行的?
  • 没有。用户有自己的“私钥”——他们的密码。您共享的项目是您的 AppID。他们使用他们的密码来证明他们是谁,连同您的 Facebook AppID 一起传递来告诉 Facebook“任何拥有该应用程序的密钥和我的令牌的人都可以访问我的数据的某些部分”。您使用您的应用程序的密钥来确认它是您的应用程序调用,并获取该数据。这与公钥/私钥加密算法非常不同。
  • 如果我坚持,我很抱歉,但我必须完全理解,我错过了一些东西:当用户在 iphone/android 应用程序中进行 fb 登录时,它会与 fb 通信并执行登录应用程序。现在在应用程序中驻留了一个 fb 登录用户。此时我需要将用户数据有效负载发送到服务器,以在数据库中创建各种内容。我不明白我应该向服务器发送什么......我确定的是:1)显然不是干净的有效载荷。 2)必须有fb用户id才能创建唯一记录
  • 当用户在手机上登录时,他们会得到一个令牌(如果你愿意,可以称之为“会话 ID”)。电话将该令牌发送到服务器。服务器使用该令牌(标识用户)和密钥(标识应用程序)从 facebook 获取用户数据。来自 facebook 的数据包括用户的 facebook id、姓名等。
  • 好的,所以在我注册后,如果一个登录 fb 的用户必须向服务器请求一些服务,它会向服务器发送访问令牌和各种参数的 uri,服务器通过直接请求它来检索 fbid到 fb(使用访问令牌和应用程序密钥),识别数据库中的用户,然后提供服务。这种解释正确吗?
猜你喜欢
  • 2011-01-30
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多