Questions tagged «facebook-authentication»

3
使用Facebook进行身份验证的网站的REST API
我们有一个网站,使用该网站登录和验证自己身份的唯一方法是使用Facebook(这不是我的选择)。首次登录Facebook时,会自动为您创建一个帐户。 现在,我们想为我们的网站创建一个iPhone应用程序,并为其他人创建一个公共API以使用我们的服务。 这个问题是关于如何通过app / API向我们的网站进行身份验证的,分为两个部分: 从API到仅使用Facebook OAuth作为身份验证方法的网站处理REST身份验证的正确方法是什么? 我已经阅读并研究了很多有关REST API身份验证的标准方法。我们不能使用基于HTTPS的基本身份验证之类的方法,因为这样的用户没有凭据。喜欢的东西,这似乎是仅适用于使用API验证的应用程序。 目前,我认为最好的方法是您点击我们API上的/ authorize端点,它重定向到Facebook OAuth,然后重定向回该站点并提供一个“令牌”,API的用户可以使用该令牌来认证后续要求。 对于我们创建的官方应用程序,我们不一定需要以相同的方式使用公共API。与我们的网站交谈并验证用户身份的最佳方法是什么? 我了解(我认为)如何使用API​​(公共)密钥和秘密(私有)密钥对使用我们的API的第三方应用程序进行身份验证。但是,当要验证使用该应用程序的用户时,当我们唯一必须验证用户身份的方法是Facebook时,我对如何进行验证感到困惑。 我感觉好像缺少了很明显的东西,或者不完全了解公共REST API的工作方式,因此,我们将不胜感激任何建议和帮助。

11
Facebook OAuth 2.0的“代码”和“令牌”
为什么在Facebook OAuth2身份验证流程中同时需要“代码”和“令牌”,如此处所述:https : //developers.facebook.com/docs/authentication/? 如果您查看OAuth对话框参考(https://developers.facebook.com/docs/reference/dialogs/oauth/),似乎您只曾经使用令牌来获取有关用户的信息,并且如果您指定了response_type参数astoken或code,token,那么您将在第一时间获得令牌。 为什么您需要获取一个“代码”,然后使用该代码获取一个“令牌”,而不是直接获取令牌? 我猜我对OAuth的工作原理有一些误解,但是https://graph.facebook.com/oauth/access_token如果您第一次在对话框中获得令牌,似乎可以完全避免请求。

3
如何在服务器端使用Facebook用户访问令牌?
前言 我正在开发几个Web服务和少数客户端(Web应用程序,移动设备等),它们将通过HTTP与上述服务进行交互。我当前的工作项目是为产品设计身份验证和授权解决方案。我已决定利用外部身份提供者(例如Facebook,Google,Microsoft,Twitter等)进行身份验证。 我正在尝试解决以下问题:“当有请求发送到服务器时,我怎么知道用户是谁,如何确定?”。下面还有更多问题... 要求 依靠外部身份来表明我正在与谁打交道('userId'本质上就是我关心的全部)。 系统应使用基于令牌的身份验证(例如,相对于cookie或基本身份验证)。 我相信这是跨多个客户端和服务器扩展同时提供松散耦合的正确选择。 工作流程 根据我对基于令牌的身份验证的阅读和理解,以下是我对工作流程的想象。现在让我们通过网络浏览器关注Facebook。我的假设是,其他外部身份提供商应具有类似的功能,尽管我尚未确认。 请注意,在撰写本文时,我基于以下Facebook登录版本2.2 客户端:使用JavaScript SDK启动登录Facebook Facebook:用户验证并批准应用权限(例如,访问用户的公开资料) Facebook:将响应发送到客户端,其中包含用户的访问令牌,ID和已签名的请求 客户端:将用户访问令牌存储在浏览器会话中(由SDK方便地处理) 客户端:通过在授权标头+用户ID(可能在自定义标头中)中发送用户的访问令牌,向我的Web服务请求安全资源 服务器:从请求标头读取用户访问令牌,并通过向Facebook提供的debug_token图API发送请求来启动验证 Facebook:使用用户访问令牌信息来响应服务器(包含appId和userId) 服务器:通过将appId与期望值(自身已知)进行比较,并将userId与客户端请求中发送的内容进行比较,从而完成令牌的验证 服务器:使用请求的资源响应客户端(假设授权路径愉快) 我在想象对服务器的后续请求将重复执行步骤5-9(而用户的访问令牌有效–未过期,从FB端撤消,更改应用权限等) 这是一个有助于执行步骤的图表。请了解该系统不是单页应用程序(SPA)。提到的Web服务是从本质上将JSON数据返回给客户端的API端点。它们不提供HTML / JS / CSS(Web客户端服务器除外)。 问题 首先,基于我的序言和要求,上述方法是否存在明显的缺口/凹坑? 是否需要/建议向Facebook执行出站请求以验证每个客户请求的访问令牌(上述步骤6-8)? 我至少知道,我必须验证来自客户端请求的访问令牌。但是,对于第一次验证之后的后续验证,推荐的方法对我来说还是未知的。如果有典型的模式,我很想听听它们。我了解,根据我的要求,它们可能取决于应用程序;但是,我只是不知道要寻找什么。一旦有了基本思路,我将进行尽职调查。 例如,可能的想法: 第一次验证完成后,将访问令牌+用户ID对散列,并将其存储在分布式缓存(可由所有Web服务器访问)中,并且到期时间等于访问令牌。根据来自客户端的后续请求,对访问令牌+ userId对进行哈希处理,并检查其在缓存中的存在。如果存在,则请求被授权。否则,请联系Facebook图形API确认访问令牌。我假设如果使用HTTPS(将会),则该策略可能可行。但是,性能如何比较? 在这个StackOverflow问题中可接受的答案建议在对Facebook用户令牌的第一次验证完成后创建一个自定义访问令牌。然后,将自定义令牌发送到客户端以进行后续请求。我想知道这是否比上述解决方案更复杂。这将需要实现我自己的身份提供者(我想避免的事情,因为我想首先使用外部身份提供者……)。这个建议有什么好处吗? 上面的步骤3中的响应上是否存在signedRequest字段(在此处提到),是否等同于“游戏画布登录”流程中此处的signed请求参数? 似乎暗示它们是等效的,因为在文档中前者链接到后者。但是,令我感到惊讶的是,网络文档的“手动构建登录流程”页面中没有提到游戏页面上提到的验证策略。 如果对#3的回答为“是”,是否可以使用相同的身份确认策略对签名进行解码并与预期在服务器端使用的身份进行比较? 我想知道是否可以利用此方法来代替对debug_token图API的出站调用(上述步骤#6),以按照此处的建议确认访问令牌: 当然,为了在服务器端进行比较,需要将签名的请求部分与请求一起发送到服务器(上述步骤#5)。除了在不牺牲安全性的情况下的可行性之外,我想知道与拨打外拨电话相比,性能如何。 当我在使用它时,在什么情况下/出于什么目的,例如,您会将用户的访问令牌持久化到数据库吗?我看不到需要这样做的情况,但是,我可能会忽略某些事情。我很好奇某些常见情况可能会引发一些想法。 谢谢!

2
是否可以检查是否在Facebook上确认了电子邮件?
更新资料 这是在2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报告的,而Facebook在12月17日回应说该错误早已得到修复。 我已经使用我的Facebook帐户重新测试了这一点(我仍然没有验证电子邮件地址),并且在使用Grap API Explorer工具时,无法使用Graph API或FQL查询获取该帐户的电子邮件地址。 结论:使用Graph API或FQL查询从Facebook获得的电子邮件地址是经过验证的电子邮件。如果帐户尚未验证,则为电子邮件,但无法获取。 原始帖子 我正在使用SSO制作一个网络应用程序,该应用程序为用户提供了使用Google或Facebook登录的功能。我希望同时使用这两种帐户的用户在我的系统中显示为同一用户,而不管他们使用哪个身份登录。为此,我正在考虑使用电子邮件地址作为标识符,以了解是否应该创建一个新帐户或用户是否已经存在。 为了不引入任何安全问题,我必须知道该电子邮件地址已经过验证,并且实际上属于该用户。对于Google,userinfo API可以告诉我电子邮件是否已验证,因此这里没有问题。但是我在Facebook Graph API中找不到类似的东西。 是否可以知道是否在Facebook上确认了电子邮件地址? 我知道有一个verified字段,但这仅告诉您该帐户是否已验证,而不是电子邮件地址。 首先,您似乎只能将Graph API用于已确认电子邮件地址的帐户。如果未确认地址,我会收到一个错误消息,告诉我必须先确认电子邮件地址,然后才能登录任何第三方站点。 但是,似乎并非所有帐户都是如此。在某些情况下,即使您没有确认的电子邮件地址,也可以访问Facebook的所有部分。例如,当您使用@ myopera.com邮件地址进行注册时。 当您使用@ myopera.com电子邮件地址注册Facebook时,您会收到一条消息,提示您在提交注册表单后帐户已被临时锁定。要继续,您需要提供电话号码以验证您的帐户并“保持Facebook安全和免受垃圾邮件侵扰”(对于截图中的瑞典语,很抱歉,这是在我进入Facebook并将语言更改为英语之前): 提供电话号码后,您就可以登录,而Facebook不会再让您担心必须验证电子邮件地址。 您可以在设置页面上看到唯一尚未验证您的电子邮件地址的地方: 在确认电子邮件地址可用并列出注册期间输入的电话号码之前,通常无法访问“移动设置”: 除此之外,还可以使用未经确认的电子邮件地址登录第三方站点: 当我与此用户连接到图api时,我可以获得未确认的电子邮件地址,并且该verified字段按预期返回true,因为我已经通过添加电话号码验证了该帐户。因此,显然我无法相信我从Facebook获得的电子邮件地址确实属于拥有Facebook帐户的用户。 还有其他方法可以知道电子邮件地址是否已通过验证,或者如果我想使用它来识别用户,是否必须自己进行验证?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.