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

时间:2016-04-05 12:07:48

标签: oauth-2.0 resources authorization

作为资源服务器,我想让用户更好地控制他们的资源。

例如,假设我有一个支持OAuth 2的云文件系统。

用户可以代表他提供访问客户端文件的权限。

我希望资源服务器能够提供对特定文件夹的访问权限,例如,只提供照片而非文档。

文件夹的名称是动态资源,因为它在用户之间有所不同。

如何处理动态资源授权?动态范围?

此外,如果范围是动态的,客户如何知道请求它?

*无法在the spec中找到它:(

3 个答案:

答案 0 :(得分:3)

文档rfc6749是OAuth 2.0规范,它定义了一种通过使用其他参数扩展OAuth 2的方法(rfc6749#section-8.2)。 因此,如果您想使用OAuth解决此问题,您可以使用此方法或类似的方法:

  • 为授权请求定义新参数以指定资源(EX:folderID = XXXXX)
  • 在授权请求期间,客户端可以使用新参数
  • 选择性地指定资源
  • 如果指定了参数,您的授权服务器将生成一个必须由资源所有者签名的“动态范围”
  • 如果未指定参数,资源所有者可以选择他想要共享的资源,并且授权服务器可以生成相关的“动态范围”(这种情况意味着资源服务器在授权流程中以某种方式参与)
  • 当资源所有者定义和签署作用域时,它们将被传递给客户端(如果后者已由资源所有者定义,它应该能够从作用域中获取资源ID)
  • 当客户端请求资源时,资源服务器还必须确保范围包含所请求的资源

请记住,如果每个用户的资源量不是很大,这种方法会更好(否则你可能会被范围淹没)。

另一种方法可能是在OAuth层后面添加额外的授权层。此附加层跟踪客户端/可访问资源的关系。

答案 1 :(得分:2)

就在最近,我不得不熟悉OAuth / OIDC,现在我面临着同样的问题 - 到目前为止我能想到的是什么 -

  • 您肯定有理由将安全性外部化(authN,authZ) - 这就是您使用OAuth的原因。您真的希望授权服务器了解您的应用程序中的资源吗?
  • 范围 - 据我所知 - 控制对API的访问,而不是'资源'在标准意义上 - 即使我读到了关于资源'类型化的范围,但那些再次允许访问API。
  • 如果您有想要控制访问权限的资源(文件),您可能最好在应用程序内处理它 - 并且如果必须,可以选择从Auth服务器请求已知客户端列表。< / LI>

无论如何,这是我尝试为自己的应用程序进行操作的方式 - 确实不会在网上找到任何关于此的资源。

答案 2 :(得分:0)

在这里复述一个很老的问题,但我认为问题仍然存在。

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

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