我有一个Node.js应用程序,它有一个"复杂的"一组OAuth流程,以使UX更简单。
我有通常的登录和注册流程,您可以使用OAuth提供程序进行身份验证。我在这里不需要任何特殊的scope
,因为OAuth纯粹用于身份验证,用户没有理由想要提升访问权限(比如私有GitHub存储库),甚至可能会认为这样是一个阴暗的问题,所以他走了,再也没有去过我的产品。因此,纯身份验证流程没有scope
。
该应用程序还具有导入功能,您可以从OAuth提供程序(例如,GitHub存储库)导入实体列表。默认情况下,您也不会被要求提供任何scope
。
单击"查找您的私人存储库?" 按钮再次针对GitHub对您进行身份验证,询问repo
范围。这一切都很好。
当用户尝试再次登录,或以其他方式执行任何可能对其进行身份验证但未明确请求repo
范围的内容时,GitHub认为这是明确的降级请求。
问题是用户在登录期间不希望降级,因为没有特殊原因。同样,我不想要求在登录期间获得比我需要的更多权限。
让事情处于这种状态会比在登录时要求repo
更糟糕,但这也是一个非常糟糕的选择。
除了两个非解决方案之外,我提出的潜在解决方案是:
scope
明确询问GitHub 唯一访问令牌,分别存储令牌,然后根据需要使用它们这很棒,除非它过于有状态,我还没有找到办法做到这一点;它们似乎为每个应用程序用户提供了一个令牌,我怀疑这是OAuth的工作原理,但在很大程度上,我还不是专家。
这听起来应该是默认行为。无论如何,有什么方法可以告诉GitHub不要降级令牌吗?
如果没有,有没有其他方法可以解决这个问题,而不需要在整个应用程序中要求相同的范围?这首先会部分地破坏范围的目的。
另外,这是GitHub特有的问题吗?我是否必须逐个提供商处理此问题?是否存在协议级解决方案奇迹般地解决了问题?或者说OAuth只是没有考虑到UX的构建?
我是否使用iojs
和passportjs
,但我认为这与此问题无关。
答案 0 :(得分:1)
事实证明,问题出现在我的代码中。我在认证流程中明确设置了一个属性(options.scope: []
,对于那些使用护照的人),这导致了一个包含&scope=&
的GitHub授权URL,这意味着我是明确的要求降级。
如果我没有明确的范围要求解决问题,请删除该选项。宇!