Facebook OAuth:自定义callback_uri参数

Jac*_*cob 68 oauth-2.0 facebook-oauth

我想为我的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,还是有一些更好的模式来为我的网站提供上下文?

Jac*_*cob 94

我想出了答案; 您可以state向请求添加参数,而不是向重定向网址添加其他参数https://www.facebook.com/dialog/oauth:

https://www.facebook.com/dialog/oauth
    ?client_id=MY_CLIENT_ID
    &scope=MY_SCOPE
    &redirect_uri=http%3A%2F%2Fwww.mysite.com%2Foauth_callback%3Ffoo%3Dbar
    &state=6234

然后将该状态参数传递给回调URL.

  • 该状态用于随机不可用的哈希以防止CSRF.有办法解决这个问题吗? (9认同)
  • 不,它可以包含任意数据.在我写这篇文章时,我在该参数中放置了一个完整的JSON对象(当​​然是URL编码的). (7认同)
  • 有趣的是,他们的文档没有提到它最初是针对 CSRF 的。然而,这并没有改变这样一个事实,即它似乎是他们传递任意数据的唯一方式。我想您可以使您的状态参数成为包含随机数和状态数据的 JSON 结构,或者仅用于查找其余信息的随机数。 (2认同)

Man*_*era 12

如果出于任何原因,你不能使用雅各布建议的选项,因为它是我的情况,你可以在传递它之前对你的参数进行urlencoderedirect_uri,它会起作用,即使它有一个完整的查询字符串foo=bar&morefoo=morebar.

  • 你举个例子吗? (6认同)