实施OAuth2范围-“完整”和“受限”资源的单独范围

时间:2019-07-15 16:04:04

标签: oauth-2.0 authorization scopes

我正在设计REST API。有一个“完整”和“受限”资源的概念-可以通过另一个更高级的资源来访问相同的资源。例如,如果存在“帖子”和“用户”资源,则可以以/api/v1/posts/api/v1/users/42/posts的身份访问“帖子”,客户端将收到更多受限响应-仅属于“用户”的帖子ID 42。

当我们开始实现此类资源的范围时,就会出现问题。一方面,尽管资源不同,但它是同一实体,因此不需要单独的范围。另一方面,它使实现变得复杂-授权服务器必须跟踪请求到资源的相关属性,并在运行时对其进行评估,而不是在授权请求时授权客户端(OAuth2词汇表),然后仅匹配请求和资源的范围

另一个问题是,是否应该有单独的范围,那么究竟是哪个?例如,它可以是posts:readuser_posts:read。如果授权服务器看到了最后一个,则它必须从请求的路径中提取user_id和访问令牌的user_id,然后进行比较。

也可能是users:read,并且每次必须检查user_id,仅检查posts:read,并且资源可以具有多个作用域。因此,“受限”资源必须同时具有-一种用于访问顶级资源(/api/v1/users/42/)和一种用于实际资源(posts)。

0 个答案:

没有答案