Oauth 2.0 无法从 signed_request 'code' 值获取访问令牌

Posted

技术标签:

【中文标题】Oauth 2.0 无法从 signed_request \'code\' 值获取访问令牌【英文标题】:Oauth 2.0 cannot get an access token from the signed_request 'code' valueOauth 2.0 无法从 signed_request 'code' 值获取访问令牌 【发布时间】:2012-01-21 02:44:23 【问题描述】:

我正在迁移到 Oauth 2.0。我当前的站点使用 JS SDK,有一个 fb-login 按钮,然后我正在访问 Graph 以获取用户详细信息。

我在获取访问令牌以从 Graph 获取此数据时遇到问题。

一个问题可能是 JS SDK 对话框没有将我重定向到它说它应该的 URL,即带有 ?code=XXXXXXX 的那个我可以用来获取访问令牌。

所以我查看了 php SDK(我正在使用 ASP)来了解它是如何做到的。我已经解析了 cookie 中的签名请求值,获取了“代码”参数中的值以添加到令牌 URL,但我无法获得访问令牌。这些是我正在使用的值:

解析的签名请求数据:

"algorithm":"HMAC-SHA256","code":"2.AQCovUOFCduELbna.3600.1323900000.1-773555243|Y_cW4riF4K7el_9a4oVNjL0qvZc","issued_at":1323895617,"user_id":"XXXXXXXXXX"

Token URL: https://graph.facebook.com/oauth/access_token?
           client_id=XXXXXXXX&
           redirect_uri=XXXXXXXX&
           client_secret=XXXXXX&
           code=2.AQCovUOFCduELbna.3600.1323900000.1-773555243|Y_cW4riF4K7el_9a4oVNjL0qvZc

这是回复:

"error":"message":"Error validating verification code.","type":"OAuthException" 

代码值的格式是否正确?有什么想法吗?

【问题讨论】:

你不会忘记 'client_secret=XXXXXX' 后面的 '&' 吗? 抱歉,这是格式问题。我的代码中确实有与号。我会修改的。 【参考方案1】:

这里的问题完全相同...

解决方案:如果代码是从 cookie 负载中提取的,请将参数 redirect_uri 留空

试试

令牌网址:https://graph.facebook.com/oauth/access_token?client_id=XXXXXXXX&redirect_uri=&client_secret=XXXXXX&code=2.AQCovUOFCduELbna.3600.1323900000.1-773555243|Y_cW4riF4K7el_9a4oVNjL0qvZc

为我工作!

【讨论】:

啊,成功了!羞耻 facebook 文档说包括它。非常感谢。 facebook(非)文档将是我的死亡 哈哈,我在谷歌删除网页的摘录中发现了这个秘密。为了让读者更加清楚,redirect_uri 必须存在,但指定为空。

以上是关于Oauth 2.0 无法从 signed_request 'code' 值获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法添加 OAuth 2.0 范围 LinkedIn

无法添加 OAuth 2.0 范围 LinkedIn

无法刷新 Reddit OAuth 2.0 访问令牌

OAuth 2.0 google 权限对话框在 WP7 上无法正常工作

Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)

将 OAuth 2.0 用于 Web 服务器应用程序流时无法选择正确的通道