Oauth 2.0 使用身份验证令牌授予对特定项的访问权限

Oauth 2.0 使用身份验证令牌授予对特定项的访问权限,oauth-2.0,openid-connect,Oauth 2.0,Openid Connect,我有一个应用程序,它为经过身份验证的用户提供有关数据库中各种对象的数据视图。在我们的生态系统中还有另一个应用程序,它使用自己的权限模型为一些相同的对象提供不同的视图。我们信任其他应用程序的权限模型,并希望允许他们向未通过我们的应用程序的常用方法进行身份验证的用户颁发访问令牌,以便这些用户只能查看其他应用程序已验证其有权访问的特定对象 我没有为这两个应用程序之间的通信提出我们自己的规范,而是想知道是否已经有了一种通过类似OpenID Connect的东西提供的标准方法。OIDC似乎处理了我们在这种

我有一个应用程序,它为经过身份验证的用户提供有关数据库中各种对象的数据视图。在我们的生态系统中还有另一个应用程序,它使用自己的权限模型为一些相同的对象提供不同的视图。我们信任其他应用程序的权限模型,并希望允许他们向未通过我们的应用程序的常用方法进行身份验证的用户颁发访问令牌,以便这些用户只能查看其他应用程序已验证其有权访问的特定对象

我没有为这两个应用程序之间的通信提出我们自己的规范,而是想知道是否已经有了一种通过类似OpenID Connect的东西提供的标准方法。OIDC似乎处理了我们在这种情况下必须考虑的大部分细节,但是它似乎不适合的一个方面是它的访问令牌似乎是通用的,而不是调用用户可以访问的特定对象。它说“这里有一个用户可以访问您的应用程序”,但不是“这里有一个用户可以访问第123项”


是否有使用访问令牌授予对特定项目的访问权限的标准,最好使用OAuth 2和/或OpenID Connect?我认为在访问令牌上使用项目的ID作为
作用域是不合适的OAuth作用域,这一假设正确吗?

我一直认为大多数现实世界应用程序的最佳设计如下:

  • 基于OAuth 2.0的技术识别用户
  • 然后在应用程序级别查找用户详细信息以强制执行授权
OAuth 2.0范围等无法处理以下情况:

  • 您没有访问帐户123的权限
  • 你没有访问我们地区的权限
因此,我倾向于在登录后从令牌中的用户id查找它们。如果外部应用程序中的项目和用户权限随着时间的推移而增长,那么这也更容易扩展

有关更多具体信息,请参阅我在上的评论

还包括RESTAPI中的编码算法,从而生成一个可以

在您的情况下,自定义声明提供程序将是外部应用程序,您可以从中查询声明,以查找实际上不适合OAuth令牌的数据


只是我的想法——不确定它是否完全适用于您——但我发现这是一个适应性很强的解决方案,它通常将责任放在正确的位置。

这也是我通常采用的方法。这是我们的应用程序迄今为止所采用的方法。在这种情况下,用户是否被授权的真实来源是一个单独的应用程序。该应用程序实际上有一组单独的用户,这些用户将不会作为我们应用程序的普通用户进行身份验证,我们的正常授权规则也不会应用于他们。对于这组单独的用户可以访问的功能子集,我们需要他们拥有一个令牌,证明他们可以使用该应用程序。理论上,我们可以使用该令牌在每个请求中查询该应用程序,并让应用程序响应有关该应用程序的授权规则是否允许他们查看给定资源的信息。但是,让令牌本身包含足够的授权信息以避免那些额外的往返有好处。有趣的场景。我想我的目标是通过一种声明缓存设计来处理它,在这种设计中,您的后端API向另一个应用程序询问规则——但只有在第一次收到令牌时——以确保良好的性能。它类似于API网关执行内省请求的方式,并且易于扩展。我编辑了上面的答案,指向几个链接。在我的阅读中,我发现确认
scope
不适合持有用户权限:应用程序需要拥有的范围。但它认为数据可以包括在报告中。