OAuth2 协议中的范围处理

Scope handling in OAuth2 protocol

我有一个关于如何处理 OAuth2 协议中的范围的一般性问题。为了便于论证,让我们从一个具体的例子开始:

假设我有一个 OAuth 服务器 A,我想使用它来保护两个 RESTful API R1R2。这两项服务具有特殊范围,它们用于授予用户对某些受保护资源的访问权限。所以假设 R1 需要范围 S1 并且 R2 需要范围 S2 才能访问一些受限资源。

让我们进一步假设 OAuth 服务器 A 也使用范围 emailprofile,需要它们来访问 OAuth 服务器本身管理的用户数据。

下面是我难以理解的内容。据我所知,OAuth 服务器 A 通常只知道如何处理他自己使用的范围(在本例中为 emailprofile)。但是,为了访问两个 API 上的受限功能(R1 需要 S1R2 需要 S2)所需的范围又如何呢?

我是否必须向 OAuth 服务器手动注册这些范围(以便它知道它们存在并且可以在需要时授予它们)?这又意味着我需要使用 OAuth 服务器注册我想要 protect/use 的所有 API 的所有范围。

这些假设是否正确?如果我在这里弄错了,也许有人可以通过解释通常如何实现整个范围处理来帮助我。我尝试 google oauth2 和范围,但似乎没有很好的解释协议中范围的处理方式。

由于 OAuth2 授权服务器 A 负责颁发访问令牌,并且访问令牌是在特定范围内授予的,因此让 A 了解 S1S2.

这不是完全必要的,A 可以将范围视为 "opaque" 字符串而不在乎,但是使用 A 注册范围让您能够检查请求的范围是否存在(并且不是一些随机字符串),以及在授权流程中向用户显示的提示中显示更有意义的消息("Do you allow "OAuth2 客户端“访问您的 R1 数据,这意味着 blablabla”而不是 "Do you grant access to S1").