如何限制OAuth';范围';参数(限制范围)

如何限制OAuth';范围';参数(限制范围),oauth,scope,facebook-apps,facebook-oauth,facebook-login,Oauth,Scope,Facebook Apps,Facebook Oauth,Facebook Login,我想使用Facebook作为我的应用程序(网站)用户的身份验证源。我不希望我的应用程序只有基本权限和电子邮件权限。因此,例如,我的应用程序不能发布到用户的墙上。换句话说,我想限制scope参数的允许值集,并且我想在应用程序的配置页面上(在Facebook网站本身上)出现这种限制 通常这很容易,只需为OAuthURL/call的scope参数指定“email” 然而,在这种情况下还有另一个因素,那就是:黑客可能获得对应用程序的访问权,并更改OAuth调用以指定更多权限。然后,一个毫无戒心的用户通常

我想使用Facebook作为我的应用程序(网站)用户的身份验证源。我不希望我的应用程序只有基本权限和电子邮件权限。因此,例如,我的应用程序不能发布到用户的墙上。换句话说,我想限制scope参数的允许值集,并且我想在应用程序的配置页面上(在Facebook网站本身上)出现这种限制

通常这很容易,只需为OAuthURL/call的scope参数指定“email”

然而,在这种情况下还有另一个因素,那就是:黑客可能获得对应用程序的访问权,并更改OAuth调用以指定更多权限。然后,一个毫无戒心的用户通常(或至少可能)会授予这些权限,黑客将能够获取OAuth令牌并代表该用户执行操作

我不想讨论这个问题的原因,只是想找到一种方法来指定我的应用程序只能对scope参数使用一组特定的值。理想情况下,此范围限制规范可以在Facebook本身的应用程序配置页面中完成

然而,我对涉及使用SAML、OpenID或某些其他仅用于身份验证的机制的替代解决方案感兴趣(即使我无法获得用户的电子邮件地址)。我对使用RPX不感兴趣


请注意:这是一个复杂的问题,而不是一个简单的问题。我已经到处寻找答案,刚刚找到了与这个问题相反的答案。

我非常确定,不可能在应用程序配置级别限制范围

我认为最整洁的解决方法是在注册时查询用户的权限,检查它们是否与允许的权限匹配,并订阅权限(实时更新)[http://developers.facebook.com/docs/reference/api/realtime/]. 如果授予用户的权限发生任何更改,将通知您的应用程序


这将允许您通过应用程序逻辑阻止任何服务器端API调用,或(ban)[https://developers.facebook.com/docs/reference/api/application/#banned]升级权限的用户。

有趣的想法。查看实时文档,它看起来像是发送更改请求,但不是用户第一次授权应用程序。您可以第一次使用/me/permissions进行检查。因此,确认它们是正确的,实时将确保它们保持正确。