是否有可能有一个 OAuth2 设置,涉及一个中央身份验证服务器和多个资源服务器拥有自己的访问范围。例如,clientApp
使用 resource-server-A
访问 scope1,scope2
,访问 resource-server-B
的访问范围为 scope3 scope4
。
虽然这可能是可能的,但我们如何在 clientApp
的授权时间内显示所有上述访问范围?是否有标准的 OAuth/open-id 方法来完成此操作?
答案 0 :(得分:1)
绝对有可能。 RFC8707 - Resource Indicators for OAuth 2.0 标准化了多年来采用的许多授权服务器实现的常见做法,以允许 OAuth 2.0 客户端指示他们打算在哪些资源服务器上使用访问令牌。
使用 RFC8707 后,您的客户端应用程序可以启动类似的授权请求
/authorization_endpoint?...&scope=scope1%20scope2%20scope3%20scope4%20&resource=urn:resource-server:A&resource=urn:resource-server:B
鉴于两个资源服务器都在 AS 上注册,AS 的工作是识别登录到资源 A 等的 scope1 和 scope2。请注意,如果两个资源的范围值都被识别,则结果是所有范围的笛卡尔积在所有目标服务中。
最好的做法是只为单个资源服务器提供访问令牌,并允许资源参数也成为访问令牌请求的参数。将其与刷新令牌结合使用,您将获得一个有效的刷新令牌,以便在调用刷新令牌授予时一次为不同的资源颁发访问令牌。