我有一个关于如何处理OAuth2协议中的范围的一般性问题。为了便于论证,我们先从一个具体的例子开始:
假设我有一个OAuth服务器A,我想使用它来保护两个RESTful API R1
和R2
。这两个服务具有特殊范围,用于授予用户对某些受保护资源的访问权限。因此,我们假设R1
需要范围S1
而R2
需要范围S2
才能访问某些受限制的资源。
让我们进一步假设OAuth服务器A
还使用了范围email
和profile
,他们需要访问OAuth服务器本身管理的用户数据。
现在这是我无法理解的。据我所知,OAuth服务器A
通常只知道如何处理他自己使用的范围(在本例中为email
和profile
)。但是,访问两个API上的受限功能所需的范围又如何(R1
需要S1
和R2
需要S2
)?
我是否必须使用OAuth服务器手动注册这些范围(以便它知道它们存在并且可以在需要时授予它们)?这又意味着我需要使用OAuth服务器注册我想要保护/使用的所有API的所有范围。
这些假设是否正确?如果我在这里弄错了,也许有人可以通过解释如何正常实施整个范围处理来帮助我。我试图谷歌oauth2和范围,但似乎没有很好的解释协议中的范围如何处理。
答案 0 :(得分:2)
由于OAuth2授权服务器A
负责颁发访问令牌,并且访问令牌被授予特定范围,因此让A
了解{{S1
是合理的。 1}}和S2
。
这并非完全必要,A
可以将范围视为"不透明"字符串并不在意,但使用A
注册作用域使您能够检查所请求的作用域是否存在(并且不是一些随机字符串),并在向用户显示的提示中显示更有意义的消息在授权流程中(&#34;您是否允许&#34; OAuth2客户端&#34;访问您的R1数据,这意味着blablabla&#34;而不是&#34;您是否授予访问S1&#34;)。< / p>