【问题标题】:Facebook Oauth2 - invalid scope id?Facebook Oauth2 - 无效的范围ID?
【发布时间】:2019-03-12 06:29:33
【问题描述】:

我正在尝试为网站实现 facebook 登录/自动注册。请求的范围有问题。

首先我尝试使用“默认”范围。根据官方文档,它提供了对 UserData 结构子集的访问。它记录在这里:

https://developers.facebook.com/docs/facebook-login/permissions/#reference-default

但是,如果我尝试这样做,则会收到错误消息:

Invalid scope: default

我也尝试过先使用一些基本的东西。例如,范围="id"。然后我得到这个错误:

Invalid scope: id

如果我尝试 scope="email first_name last_name middle_name name picture" 那么:

Invalid scope: first_name

目前唯一有效的是 scope="email",但这还不足以自动注册。

此外,文档明确指出“所有权限,除了默认公共配置文件字段,都需要为您的应用启用 Facebook 登录和客户端 OAuth 登录,以允许用户或页面授予您的应用这些权限。” (您可以在https://developers.facebook.com/docs/facebook-login/permissions/ 的顶部阅读此内容)。所以看起来范围不是无效的,因为我没有为我的应用启用 Facebook 登录。它们因某些其他原因而无效 - 可能是因为它们不存在?

我想知道如果这些范围无效,为什么要记录它们?我在哪里可以找到有效的?

旁注:Facebook 似乎没有遵循 RFC 6749。当出现错误时,Oauth2 服务器(https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2 更具体地说是 4.1.2.1 错误响应)。但 Facebook 并没有这样做。它会在 facebook.com 上显示一个弹出窗口,如果我在该窗口上按“确定”,它会进入一个无限循环并一次又一次地显示相同的消息:“你没有登录”。 (为什么会这样?)

更新:尽管我只使用了 scope=email,但 /me api 返回了所有字段,包括 first_name、last_name、email 和个人资料图片。所以也许这些东西不是范围,而是字段名。但目前还不清楚有哪些范围可用?文档似乎仍然很糟糕。它应该清楚地说明哪些术语是范围,哪些是数据结构中的字段名称。并且文档中仍然缺少完整的范围列表(或者可能有一个列表,只是我找不到它?)

【问题讨论】:

    标签: facebook oauth-2.0


    【解决方案1】:

    文档确实有点误导,但“默认”不是权限/范围,它只是告诉您想要无需额外权限即可获得的数据。如果您只是滚动到顶部,您可以在问题的链接中找到可用的权限。只有该列表很重要,对于默认字段,有一个链接“默认公共配置文件字段”,但是 - 再次 - 不需要范围/权限。

    是的,范围和字段之间存在很大差异。例如email字段在email范围授权后可以使用,但birthday字段需要user_birthday权限授权。可以在此处找到字段,例如:https://developers.facebook.com/docs/graph-api/reference/v3.1/user

    【讨论】:

    • “权限”和“范围”是两个不同的东西。不是吗?我确切地知道“范围”的含义,因为它记录在 RFC 6749 中。但我不知道“权限”在这种情况下的含义。在该页面的顶部,确实有一个列表。它主要包含权限,但“默认用户配置文件字段”不是范围。至少他们应该提到权限 == 范围,并且“默认用户配置文件字段”不是范围。我什至不明白他们为什么把它放在那个列表中。应该在单独的段落中解释。
    • 您使用范围参数添加其他权限,例如:“scope=email,user_birthday,...”
    • 这也不是 RFC 6749 兼容的。 RFC 说范围应该用空格分隔。 Facebook API 确实也接受空格,但似乎每个人都在使用逗号。
    • @nagylzs Facebook 登录 API 不符合 OAuth2。他们的文档中没有使用过的术语。
    • 哦,是的,他们明确地写了诸如“要获取访问令牌,请向以下 OAuth 端点发出 HTTP GET 请求”之类的内容(请参阅developers.facebook.com/docs/facebook-login/…)。如果他们的 API 不是 Oauth 兼容的,那么他们不应该使用术语“oauth 端点”。这是非常具有误导性的。
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多