Azure AD 代表服务主体

问题描述 投票:0回答:1

我在 Azure 中有一个 Api,第 3 方应该与之集成。每个客户端应用程序(应用程序注册)代表一家公司,只能访问该公司的数据,就像用户只能访问其公司的数据一样。我的问题是通过客户端凭据获取访问令牌时没有用户在场。

我最初的想法是查看“oid”、“sub”或“azp”声明,并将其映射到可以访问特定公司的“服务帐户”类型的用户。但是当我需要访问下游 Api 时,这些声明就丢失了。

我尝试使用 on-behalf-of 流程,使用 Microsoft.Identity.Abstractions 命名空间中的 GetForAppAsync 方法,希望某些东西可以通过指向原始调用者,但我还没有找到任何东西。

我在想我可能会以错误的方式处理这个问题,因为到目前为止我没有发现任何信息表明这是一个常见的解决方案。

这个关于功能请求的评论恰好是我所需要的,但功能请求已关闭,还有另一条评论说它对第 3 方不可用。 https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/2130#issuecomment-719094803

这个问题也是一样的,但是通过创建一个虚拟用户并使用 ROPC 获取令牌解决了,这是微软不推荐的。 https://github.com/MicrosoftDocs/azure-docs/issues/53334

有人对类似问题有任何意见吗?您将如何解决识别客户端应用程序的问题,以便您可以限制数据访问?

oauth-2.0 azure-active-directory access-token clientcredential on-behalf-of
1个回答
0
投票

不支持服务主体的 OBO。您必须继续使用客户端凭据在您的 API 与任何下游 API 之间进行调用。您可以将任何公司特定的标识符作为下游 API 请求的一部分传递。例如。

https://downstreamapi/v1/companydata/1
。您将在 API 中执行每个公司的授权规则。例如。
client1 can request companydata for company 1 and 2 but not 3 or 4

© www.soinside.com 2019 - 2024. All rights reserved.