我有一个 Facebook 画布应用程序。我正在使用 JS SDK 在浏览器端对用户进行身份验证,并通过 FB.api 请求各种信息(例如姓名、朋友等)。
我还想通过 ajax 调用将一些额外的用户信息(不在 Facebook 上)保存到我服务器上的数据库中:
{ userFavouriteColour: "Red" }
要将其保存在服务器上并与正确的用户关联,我需要知道 Facebook uid,这会带来问题。如何将 uid 从客户端传递到服务器。
选项 1:将 uid 添加到 ajax 请求:
{ uid: "1234567890",
userFavouriteColour: "Red" }
这显然不好。任何人使用别人的 Facebook ID 向我的网络服务发出 ajax 请求并更改他们最喜欢的颜色都是微不足道的。
选项 2:在服务器上,从 cookie 中提取 uid:这甚至可能吗?我读到 Facebook 设置了一个包含 uid 和访问令牌的 cookie,但我可以访问我的域上的这个 cookie 吗?更重要的是,我可以安全地从 cookie 中提取 uid,还是像选项 1 一样对欺骗开放。
选项 3:服务器上的用户服务器端身份验证:我可以使用服务器端身份验证来验证服务器上的用户身份。但是,如果我已经在浏览器上使用客户端身份验证,这会起作用吗?我最终会得到两个不同的访问令牌吗?我想从浏览器发出 FB.api 请求,所以我需要客户端上的访问令牌(而不仅仅是服务器上)。
这一定是一个非常常见的场景,所以我认为我缺少一些基本的东西。我已经阅读了很多 Facebook 文档(各种身份验证流程、访问令牌、签名请求等)和许多关于 SO 的帖子,但我仍然不明白客户端身份验证和服务器端身份验证如何很好地结合在一起。
简而言之,我想知道服务器上用户的身份,但仍然从客户端浏览器向 Facebook api 发出请求?
(我在服务器上使用 ASP.NET 和 Facebook C# SDK)
编辑:增加赏金。我希望得到一个关于如何处理这种情况的更权威的官方建议,甚至是一个例子。如前所述,我已经阅读了很多关于身份验证流程的官方 FB 文档,但我仍然找不到任何关于客户端和服务器端身份验证如何协同工作的明确信息。