繁体   English   中英

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

[英]OAuth 2 - how to define dynamic resource authorization?

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

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

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

我希望资源服务器提供对特定文件夹的访问,例如,只有照片而不是文档。

文件夹的名称是一种动态资源,因为它因用户而异。

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

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

* 在规范中找不到它:(

作为 OAuth 2.0 规范的文档 rfc6749 定义了一种通过使用附加参数来扩展 OAuth 2 的方法(rfc6749#section-8.2)。 所以,如果你想用 OAuth 解决这个问题,你可以使用这种方法或类似的方法:

  • 您为授权请求定义一个新参数以指定资源(例如:folderID=XXXXX)
  • 在授权请求期间,客户端可以使用新参数选择性地指定资源
  • 如果指定了该参数,您的授权服务器将生成一个必须由资源所有者签名的“动态范围”
  • 如果不指定参数,Resource Owner可以选择自己想要共享的资源,Authorization服务器可以生成相关的“动态范围”(这个场景意味着在Authorization流程中资源服务器以某种方式参与)
  • 当范围由资源所有者定义和签名时,它们将传达给客户端(如果后者已由资源所有者定义,则它应该能够从范围派生资源 ID)
  • 当客户端请求资源时,资源服务器还必须确保范围包括请求的资源

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

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

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

  • 您肯定有理由将安全性外部化(authN、authZ)——这就是您使用 OAuth 的原因。 你真的想让你的授权服务器知道你在你的应用程序中拥有的资源吗?
  • 作用域——据我所知——控制对 API 的访问,而不是标准含义中的“资源”——即使我读到了“资源”类型的作用域,但那些再次授予对 API 的访问权限。
  • 如果您有想要控制访问权限的资源(文件),最好在应用程序中处理它 - 如果必须,还可以选择从身份验证服务器请求已知客户端的列表。

无论如何,这就是我要尝试为我自己的应用程序执行此操作的方式 - 没有在网上找到有关此的任何资源确实令人惊讶。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM