gpt4 book ai didi

node.js - 同一应用程序中不同流程的 OAuth 范围?

转载 作者:太空宇宙 更新时间:2023-11-03 22:15:18 25 4
gpt4 key购买 nike

上下文

我有一个 Node.js 应用程序,它具有一组“复杂”的 OAuth 流,以便使用户体验更简单。

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

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

example.png

单击“正在查找您的私有(private)存储库?”按钮将再次针对 GitHub 对您进行身份验证,询问存储库范围。这一切都很好。

问题

当用户尝试再次登录或执行任何可能对他们进行身份验证但未明确请求 repo 范围的操作时,GitHub 会认为这是一个显式降级请求。

downgrade.png

问题是用户在登录期间无缘无故地不想降级。同样,我不想在登录期间请求超出我需要的权限

让事情保持这种状态会比登录时请求repo更糟糕,但这也是一个非常糟糕的选择。

潜在的解决方案

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

  • 根据请求的范围明确向 GitHub 请求唯一访问 token ,单独存储 token ,并在以后根据需要使用它们

那就太好了,只是它太有状态了,而且我还没有找到一种方法来做到这一点;他们似乎为每个应用程序用户提供一个 token ,我怀疑这就是 OAuth 在很大程度上的工作方式,但我并不是这方面的专家。

  • 如果 token 的权限高于其要求的权限,请明确告诉 GitHub 不要降级

在我看来,这应该是默认行为。无论如何,有什么方法可以告诉 GitHub 不要降级 token 吗?

如果没有,是否有其他方法可以解决此问题,而无需在整个应用程序中请求相同的范围?这首先会部分地违背作用域的目的。

此外,这是 GitHub 特有的问题吗?我是否必须逐个提供商来处理此问题?是否有一个协议(protocol)级的解决方案可以奇迹般地让问题消失?或者 OAuth 构建时并未考虑到用户体验?

FWIW我正在使用iojspassportjs,但我认为这与这个问题没有任何关系。

最佳答案

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

删除该选项,以防我没有明确的范围要求解决问题。哇!

关于node.js - 同一应用程序中不同流程的 OAuth 范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com