OAuth 2 - 如何定义动态资源授权?

4
作为资源服务器,我想让用户对他们的资源拥有更多的控制权。例如,考虑我有一个支持OAuth 2的云文件系统。用户可以代表自己向客户端提供访问文件的权限。我希望资源服务器提供对特定文件夹的访问,例如仅限照片而不是文档。文件夹名称是动态资源,因为在用户之间会有所不同。如何处理动态资源授权和动态范围?此外,如果范围是动态的,客户端如何知道请求它?* 在规范中找不到它 :(
3个回答

4
文档rfc6749是OAuth 2.0规范,定义了一种通过使用附加参数(rfc6749#section-8.2)来扩展OAuth 2的方法。因此,如果您想使用OAuth解决此问题,可以使用此方法或类似方法:
  • 您可以为授权请求定义一个新参数以指定资源(例如:folderID=XXXXX)
  • 在授权请求期间,客户端可以使用新参数选择性地指定资源
  • 如果指定了参数,则您的授权服务器将生成由资源所有者签名的“动态范围”
  • 如果未指定参数,则资源所有者可以选择要共享的资源,授权服务器可以生成相关的“动态范围”(此场景意味着资源服务器在授权流程中有所涉及)
  • 当范围由资源所有者定义并签署后,它们会被传达给客户端(如果资源所有者定义了范围,则客户端应该能够从范围中推导出资源ID)
  • 当客户端请求资源时,资源服务器还必须确保范围包括所请求的资源
请记住,如果每个用户的资源数量很大,这种方法效果更好(否则您可能会被范围淹没)。
另一种方法是在OAuth层后面添加额外的授权层。此附加层跟踪客户端/可访问资源之间的关系。

2

最近我不得不熟悉OAuth / OIDC,并且现在我面临同样的问题-以下是我能想到的:

  • 您肯定有外部化安全性(authN,authZ)的理由-这就是为什么您使用OAuth的原因。您真的希望授权服务器知道您应用程序中的资源吗?
  • 据我所知,作用域可以控制对API的访问,而不是标准意义上的“资源” - 即使我读过关于“资源”类型的作用域,但那些也是为了访问API。
  • 如果您有要控制访问权限的资源(文件),则最好将其处理在应用程序内-如果必须,可以选择从Auth服务器请求已知客户端列表。

无论如何,这是我打算为自己的应用程序尝试做的事情-确实惊奇地发现在网上找不到任何相关资源。


0

在这里重新提出一个相当古老的问题,但我认为这个问题仍然存在。

需要记住的一个有用细节是,客户端请求的范围和资源所有者允许的范围不必相等。事实上,RO允许的范围甚至不必是所请求范围的子集。

在您的情况下,RO允许的范围可以是一组资源URL,根据请求的范围在授权步骤中由RO选择。然后,通过查看访问令牌中的值并理解它们的含义,资源服务器将能够动态地提供所请求的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接