我在Azure中有一个第三方应该集成的API。每个客户端应用(应用注册)代表一家公司,应该只访问该公司的数据,就像用户只访问其公司的数据一样。我的问题是,通过客户端凭据获取访问令牌时没有用户在场。
我最初的想法是查看“oid”、“sub”或“azp”声明,并将其Map到访问特定公司的“服务帐户”类型的用户。但当我需要访问下游API时,这些声明丢失了。
我尝试使用代表流,在Microsoft.Identity.Abstractions命名空间中使用GetForAppAsync方法,希望能通过指向原始调用者的方式传递一些信息,但我还没有找到任何信息。
我想我可能用了错误的方法,因为到目前为止我还没有找到任何信息表明这是一个常见的解决方案。
这个关于功能请求的评论看起来正是我所需要的,但是功能请求已经关闭,并且还有另一个评论说它不适用于第三方。https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/2130#issuecomment-719094803
此问题也是相同的,但通过创建虚拟用户并使用ROPC获取令牌解决了此问题,Microsoft不建议使用ROPC。https://github.com/MicrosoftDocs/azure-docs/issues/53334
有没有人对类似的问题有任何意见?你将如何解决识别客户端应用程序,以便您可以限制数据访问?
1条答案
按热度按时间pdkcd3nj1#
不支持服务主体的OBO。您必须继续使用客户端凭证在您的API与任何下游API之间进行调用。您可以将任何公司特定的标识作为您的下游API请求的一部分传递。例如
https://downstreamapi/v1/companydata/1
。您将在您的API中强制执行每个公司的授权规则。例如client1 can request companydata for company 1 and 2 but not 3 or 4
等。