【发布时间】:2012-06-05 10:47:16
【问题描述】:
我正在尝试构建一个 facebook 身份验证的 Web 应用程序,这样就不必构建我自己的。因此,在 facebook 对他们进行身份验证并向我提供他们的 user_id 后,我可以简单地将其存储在他们的数据库中。
显然,我想保护我的用户不被纯粹使用他们的 user_id 欺骗。这是我想出的:
- 我不会在浏览器和我的服务器之间来回传递 user_id,而是传递 signed_request,因为在不知道我的 app_secret 的情况下无法对其进行欺骗
- 为了防止它被嗅探和重复使用,我将把我的请求封装在 SSL (HTTPS) 中
- 为防止使用过时的signed_requests,我将确保issued_at 是相对较新的。
这部分是signed_request 的目的,还是有更正确的方式来使用facebook 身份验证?
我的方法有什么明显的问题吗?
谢谢!
【问题讨论】:
-
在客户端/服务器之间不交换数据会更简单,只需让客户端验证自己,服务器自行完成,这样每一方都有自己的令牌并获取查询图表了解它需要的信息。
-
好吧,我一直在关注this 方法,因为使用 JavaScript SDK 似乎是进行 facebook 身份验证的最简单方法。如果身份验证是由客户端执行的,我仍然需要一些东西来将经过验证的身份传递给服务器,我想知道 signed_request 是否适合于此。您是建议完全使用 Server-Side Authentication 还是我在这里遗漏了什么?
-
是的,我确实建议使用服务器端身份验证,它真的不复杂,而且我认为,因为你有一个经过身份验证的用户之前你甚至可以更好地控制事情将html输出发回给他。查看How to pass Facebook Id from client to server securely。
-
我确实喜欢让该用户在我的服务器端,而不是依赖客户端向我传递他的身份。我注意到在服务器端流程中,访问令牌是在 URL 中传递的,因此即使通过 HTTPS 也会暴露出来。这是否意味着如果对 facebook 的客户端请求是 HTTPS 并且我传递回服务器的令牌是通过 HTTPS 的,我会更安全?
-
代码在url中传递,访问令牌在https请求的响应中。它足够安全。
标签: facebook oauth facebook-javascript-sdk