我有一个应用程序,可为经过身份验证的用户提供有关数据库中各种对象的数据视图。我们的生态系统中还有另一个应用程序,使用其自己的权限模型为某些相同的对象提供不同的视图。我们信任其他应用程序的权限模型,并希望允许他们向未通过我们应用程序的常规方法进行身份验证的用户颁发访问令牌,因此这些用户只能查看其他应用程序已验证其有权访问的特定对象
我没有想出我们自己的用于这两个应用程序之间通信的规范,而是想知道是否已经存在通过OpenID Connect之类的标准方法。 OIDC似乎处理了我们在这种情况下必须考虑的大多数棘手细节,但它似乎不适合的一个方面是其访问令牌似乎是通用的,而不是大声疾呼。用户有权访问的特定对象。它说“这是可以访问您的应用程序的用户”,但不是“这是可以访问项目123的用户”。
是否存在使用访问令牌来授予对特定项目的访问权限的标准,最好使用OAuth 2和/或OpenID Connect?我是否正确地假设将项目的ID用作访问令牌上的scope
是对OAuth范围的不当使用?
答案 0 :(得分:0)
我总是为大多数现实应用找到最佳设计,就像这样:
OAuth 2.0范围等无法处理以下情况:
因此,我倾向于在登录后从令牌中的用户ID查找它们。例如,如果外部应用程序中的项目和用户权限随着时间的推移而增长,则这往往也更容易扩展。
有关更多具体信息,请参阅我在API Claims Caching上的文章。
Rest API中的编码算法也here is an example,导致声明对象可能是injected into logic classes。
在您的情况下,自定义声明提供者将是外部应用程序,并且您可以从中查询声明,以获取与OAuth令牌不符的数据。
仅是我的想法-不确定它是否对您完全有效-但我发现这是一个非常适用的解决方案,通常会将责任放在正确的位置。