Node.js 同一应用程序中不同流的OAuth作用域? 上下文

Node.js 同一应用程序中不同流的OAuth作用域? 上下文,node.js,github,oauth,passport.js,Node.js,Github,Oauth,Passport.js,我有一个Node.js应用程序,它有一组“复杂”的OAuth流,以简化UX 我有通常的登录和注册流程,您可以使用OAuth提供程序进行身份验证。我在这里不需要任何特殊的范围,因为OAuth纯粹用于身份验证,用户没有理由想给我更高的访问权限(比如私有GitHub存储库),甚至可能会认为这是一个不光彩的问题,所以他离开了,不再访问我的产品。因此,对于纯身份验证流,没有scope 该应用程序还具有导入功能,您可以从OAuth提供程序(例如GitHub存储库)导入实体列表。默认情况下,此处也不会要求您输

我有一个Node.js应用程序,它有一组“复杂”的OAuth流,以简化UX

我有通常的登录和注册流程,您可以使用OAuth提供程序进行身份验证。我在这里不需要任何特殊的
范围
,因为OAuth纯粹用于身份验证,用户没有理由想给我更高的访问权限(比如私有GitHub存储库),甚至可能会认为这是一个不光彩的问题,所以他离开了,不再访问我的产品。因此,对于纯身份验证流,没有
scope

该应用程序还具有导入功能,您可以从OAuth提供程序(例如GitHub存储库)导入实体列表。默认情况下,此处也不会要求您输入任何
范围

单击“查找您的私有存储库?”按钮再次验证您是否符合GitHub,询问
repo
范围。这一切都很好

问题 当用户尝试再次登录,或以其他方式执行任何可能对其进行身份验证的操作,但没有明确请求
repo
范围时,GitHub认为这是一个明确的降级请求

问题是用户不希望在登录过程中因为没有特殊原因而降级。类似地,我不想在登录过程中要求比需要更多的权限

保持这种状态比登录时要求回购更糟糕,但这也是一个非常糟糕的选择

潜在解决方案 除了两个非解决方案外,我提出的潜在解决方案是:

  • 根据请求的
    范围
    ,明确向GitHub请求唯一访问令牌,单独存储令牌,然后根据需要使用它们
那太好了,不过太有条理了,而且我还没有找到一个方法去做;它们似乎为每个应用程序用户提供了一个令牌,我怀疑OAuth在很大程度上就是这样工作的,但我在这方面还不是专家

  • 明确告诉GitHub如果某个令牌的权限高于其要求的权限,则不要降级
我觉得这应该是默认行为。总之,我有没有办法告诉GitHub不要降级令牌?

如果没有,是否有其他方法可以解决此问题,而不必在整个应用程序中要求相同的作用域?这首先会部分破坏作用域的用途

另外,这是GitHub特有的问题吗?我是否必须逐个供应商处理此问题?是否有一种协议级解决方案可以奇迹般地解决问题?或者OAuth只是没有考虑到用户体验


FWIW我使用的是
iojs
passportjs
,但我认为这与这个问题没有任何关系。

事实证明,问题出在我的代码中,就像通常所说的那样。我在身份验证流上显式设置了一个属性(
options.scope:[]
,用于那些使用passport的人),这导致了一个包含
&scope=&
的GitHub授权URL,这意味着我显式地要求降级

如果我没有明确的范围要求解决问题,请删除该选项。呜