标签: facebook-oauth

Facebook OAuth:自定义callback_uri参数

我想为我的Facebook OAuth2集成提供动态重定向网址.例如,如果我的Facebook应用程序中的重定向URL是这样的:

http://www.mysite.com/oauth_callback?foo=bar

我希望特定请求的重定向URL是这样的,所以在服务器上,我有一些关于如何处理身份验证代码的上下文:

http://www.mysite.com/oauth_callback?foo=bar&user=6234

在提交授权对话框后,我的重定向被调用,然后我返回一个身份验证代码,但是当我尝试获取访问令牌时,我从Facebook收到OAuthException错误.我的请求看起来像这样(为了清晰起见,添加了换行符):

https://graph.facebook.com/oauth/access_token
    ?client_id=MY_CLIENT_ID
    &redirect_uri=http%3A%2F%2Fwww.mysite.com%2Foauth_callback%3Ffoo%3Dbar%26user%3D6234
    &client_secret=MY_SECRET
    &code=RECEIVED_CODE

我的所有参数都是URL编码的,代码看起来有效,所以我唯一的猜测是问题参数是我的redirect_uri.我尝试过设置redirect_uri以下所有内容,但无济于事:

  1. 我网站请求的实际网址
  2. 我网站的请求的网址减去code参数
  3. 我的Facebook应用程序配置中指定的URL

是否支持自定义重定向URI参数?如果是这样,我是否正确指定它们?如果没有,我会被迫设置一个cookie,还是有一些更好的模式来为我的网站提供上下文?

oauth-2.0 facebook-oauth

68
推荐指数
2
解决办法
5万
查看次数

自offline_access弃用以来如何扩展访问令牌的有效性

由于offline_access 权限是在Facebook的弃用认证流程,我们有问题歌厅所谓的长期生活的访问令牌没有这个权限.

Facebook的文档中有关的弃用说,服务器端OAuth生成的访问令牌将是长期存在的,但事实并非如此.

我错过了什么吗?应用设置中的一些设置?我需要使用一些特殊代码来延长访问令牌的到期时间?据我所知,对于服务器端身份验证,getAccessToken()当用户登录时,可以通过PHP SDK 的方法访问访问令牌.

php facebook-graph-api oauth-2.0 facebook-oauth facebook-php-sdk

60
推荐指数
3
解决办法
5万
查看次数

从用户访问令牌获取应用程序ID(或验证源应用程序是否有令牌)

我找到了这个问题,它有一个答案,但从那时起facebook改变了令牌格式,现在它是这样的:

AAACEdEose0cBACgUMGMCRi9qVbqO3u7mdATQzg[more funny letters]ig8b3uss9WrhGZBYjr20rnJu263BAZDZD
Run Code Online (Sandbox Code Playgroud)

简而言之,你无法从中推断出任何东西.我还找到了访问令牌调试器,它显示了我正在寻找的信息,如果你粘贴一个令牌,这很好,但不能帮助我以编程方式进行.

重点是,如果有人为用户获取令牌,他可以使用它来访问图表,这就是我在我的应用程序中所做的事情 - 我想确保人们转发我的应用程序发给他们的令牌,而不是另一个.

我的申请流程是:

  1. 从Facebook获取访问令牌(没有什么特别的,就像在这里描述的那样,服务器端流.(也是iPhone和Android和使用,但如果我没记错的话他们有类似的流程))
    [设备] < - > [facebook ]
  2. 使用该访问令牌,设备将使用令牌
    [device] < - > [Jonathan的应用程序] 访问我的应用程序服务器
    在我的服务器上,我将访问令牌附加到用户并使用它来为我的应用程序中的该用户授予权限.(使用facebook连接验证用户)


我的应用程序是安全的,无论facebook如何,访问完成也都经过身份验证,但是!在这个流程中,我发现的弱链接是我无法验证我获得的访问令牌是否已经为我的应用程序签名 - 我不喜欢它,因为我将令牌缓存用于离线使用,我希望100%确定它们是我的应用程序,具有我的权限.

那么验证我获得的令牌与我的应用程序相关的(最佳)方式是什么(与用户的关系,我使用令牌来访问/我并查看此令牌用于哪个用户)

我不需要解密令牌(我猜它是某种AES),我只是在找一个会告诉我令牌与我的应用程序ID匹配的端点.

(编辑:使用C#SDK,如果重要..但是图形/休息调用以提供该信息同样好:))

facebook oauth-2.0 facebook-c#-sdk facebook-oauth

59
推荐指数
3
解决办法
3万
查看次数

"设备登录"的时间表和/或offline_access的替代方案+一次登录

我有一个用于facebook的小型恐龙时代命令行界面(CLI)应用程序.没有庞大的用户群,但它有自己的利基.它最无私的用法是那些部分失明并依赖其他基于文本的命令行界面的人.

它确实是一个"桌面应用程序",没有浏览器界面,也无法在应用程序中嵌入浏览器.它是使用PHP CLI用PHP编写的,它托管在github上.[获取更新信息的beta分支].

我显然有点担心被删除offline_access.

我把我的希望寄托在待处理的"设备登录"上,并且真的希望在他们将开关切换到删除之前就已经准备就绪,offline_access但事实并非如此.我找不到任何来自Facebook的信息,表明"设备登录"何时可用.我暗地希望FB开发团队的某个人能够看到这个,并把我当作早期采用者.

目前我将用户发送到非常旧的"一次性登录"页面:www.facebook.com/code_gen.php?v=1.0&api_key=XXX这为用户提供了一个临时授权代码,我可以使用它来获取较旧的会话密钥 - 然后我可以使用graph.facebook.com/oauth/exchange_sessions获得新的OAuth会话.

因此,我希望Facebook上的某个人能够了解何时会出现"设备登录",或者我是否应该使用更好的方法.

现在,我拥有的最佳解决方案是托管一些页面,向用户显示他们的oauth会话信息,然后让用户将其作为命令行参数剪切并粘贴到我的应用程序.我想避免这种方法 - 特别是因为现在看起来他们必须定期(每60天)这样做.

command-line-interface app-offline.htm offlineapps facebook-oauth facebook-app-center

58
推荐指数
1
解决办法
1309
查看次数

如何在Django应用程序中进行Facebook登录?

我创建了一个Django应用程序.该应用程序具有登录功能.

有人可以帮助找到一种方法,使用Facebook凭证登录或指向我一些教程来实现它吗?

python django facebook oauth facebook-oauth

42
推荐指数
3
解决办法
3万
查看次数

Java示例如何使用OAuth在GAE上使用Facebook帐户登录

我搜索了很多,阅读了很多博客,文章,教程,但直到现在还没有得到一个可以使用脸书帐户登录我的应用程序的工作示例.

我知道我必须使用OAuth,获取令牌,自动化等...

有谁可以分享一个例子?(关于GAE/JAVA)

java google-app-engine facebook oauth facebook-oauth

39
推荐指数
2
解决办法
6万
查看次数

奇怪的网址附加"#_ = _"

可能重复:
播放框架附加#=在Facebook验证后通过OAuth2重定向?

还有其他人看到过这种情况吗?

我正在使用Facebook PHP SDK和一些Javascript构建一个Facebook画布应用程序.
现在当我带领用户完成OAuth身份验证流程时,我注意到浏览器中的URL会自动附加到此"#_=_",因此我的URL开始如下所示:

http://apps.facebook.com/xxxxxxxxxxxx/#_=_
Run Code Online (Sandbox Code Playgroud)

当我重定向到应用程序配置文件页面时,URL是这样的:

http://www.facebook.com/apps/application.php?id=xxxxxxxxxxxx#_=_
Run Code Online (Sandbox Code Playgroud)

我正在重定向使用

echo "<script type='text/javascript'>top.location.href='$appcanvasurl';</script>"
Run Code Online (Sandbox Code Playgroud)

到画布URL,和

echo "<script type='text/javascript'>top.location.href='$appprofurl';</script>"
Run Code Online (Sandbox Code Playgroud)

对于应用资料页面.

那为什么会#_=_附加?

更新:

根据跟踪器上的这个错误,这是设计的,并给出一个值redirect_uri不会改变这一点.

并根据该页面上官方Facebook回复(必须登录Facebook查看帖子):

这被标记为"按设计",因为它可以防止潜在的安全漏洞.

某些浏览器会将URL中的哈希片段附加到已重定向到的新URL的末尾(如果新URL本身没有哈希片段).

例如,如果exam​​ple1.com返回到example2.com的重定向,那么访问example1.com#abc的浏览器将转到example2.com#abc,而example1.com上的散列片段内容可以访问example2上的脚本.COM.

由于可以将一个auth流重定向到另一个,因此可以从一个应用程序访问另一个应用程序的敏感身份验证数据.

通过将新的哈希片段附加到重定向URL来缓解此问题,以防止此浏览器行为.

如果关注结果URL的美学或客户端行为,则可以使用window.location.hash(甚至是您自己的服务器端重定向)来删除有问题的字符.

facebook facebook-oauth facebook-php-sdk

34
推荐指数
1
解决办法
2万
查看次数

如何在不使用个人Facebook帐户的情况下为公司创建Facebook应用程序?

我的问题与类似,但我是从开发人员的角度而不是公司的角度撰写的.

我更喜欢将我的个人和职业生活分开,因此希望能够创建与我的个人FB帐户无关的Facebook应用程序.根据FB政策,每个帐户必须与真人关联,即我不能拥有单独的开发者帐户.有没有办法在不使用我的个人帐户的情况下创建FB应用程序?你有其他自由职业者(甚至非自由职业者)只使用你的个人账户吗?如果是这样,你对这样做有任何疑虑吗?如果我要与其他开发人员合作,我是否需要担心与他们分享任何个人信息?

谢谢.

facebook facebook-graph-api facebook-oauth

28
推荐指数
1
解决办法
9864
查看次数

在Facebook应用程序中获取访问令牌时应该是redirect_uri?

$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url) 
    . "&client_secret=" . $app_secret 
    . "&code=" . $code;
Run Code Online (Sandbox Code Playgroud)

什么应该是redirect_uri?我试过用这个

'https://graph.facebook.com/oauth/authorize?client_id='.$app_id.'&
redirect_uri='.urlencode($canvas_page).'&scope=email,read_stream,publish_stream';
Run Code Online (Sandbox Code Playgroud)

但它返回时出现此错误

{
   "error": {
      "message": "Error validating verification code.",
      "type": "OAuthException"
   }
}
Run Code Online (Sandbox Code Playgroud)

需要帮助,提前致谢.

facebook oauth access-token facebook-oauth

24
推荐指数
1
解决办法
5万
查看次数

不明白"(#4)达到用户请求限制"

{
   "error": {
      "message": "(#4) User request limit reached",
      "type": "OAuthException"
   }
}
Run Code Online (Sandbox Code Playgroud)

我不确定这个错误的原因,是的,我已经做了很多搜索类似用户的问题(他们是错误#17,或达到app限制).我正在常规的图形API调用(例如https://graph.facebook.com/me)上执行此操作,不一定像其他人遇到过FQL.

User request limit reached使它看起来像每用户限制,但根据http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.php,#4"Application request limit reached"#17"User request limit reached".

我不相信无论如何我都达到了100M /天的app限制.我只为几个用户的auth令牌获取它,所以它不是我得到的应用程序范围的错误消息.当我要求太快时,我通常会得到FQL_EC_RATE_LIMIT_EXCEEDED.

但是对于那些有上述错误的用户"(#4) User request limit reached",我暂时将他们列入加载数据的黑名单,但是当我尝试在一天后使用该身份验证令牌访问时,他们仍然会收到上述错误.

所以总结......

我不明白"(#4) User request limit reached"当该用户的auth-token未在24小时之前的任何查询中使用时我怎么能得到.我不知道这些用户有什么特别之处.

任何建议或意见将不胜感激.几天前它只有一个用户,但今天第二个用户开始遇到这个问题,我担心这个问题将来会变得更糟,没有明确的解决方案.

oauth limit facebook-graph-api facebook-oauth

24
推荐指数
1
解决办法
1万
查看次数