我一直在进行一些使用MicrosoftGraphAPI来获取组织所订阅的草图的研发。
我已经按照in the documentation的描述创建了一个应用。我做了上面链接中的所有步骤,除了“将应用程序分配给角色”。
使用邮递员能够通过使用链接发送发帖请求来获取oauth2令牌
https://graph.microsoft.com
带有client_id,client_secret,resource(client_credentials
)和grant_type(https://graph.microsoft.com/v1.0/subscribedSkus
)参数。
获得此令牌后,我可以激发一个将授权标头设置为Bearer {token}
的获取请求p = People.objects.all().filter(state=1)
# p.tipe.name
names = [x.tipe.name for x in p]
,它将返回我的组织订阅的SKU。
到目前为止,一切都很好。 :-)
现在的要求是,我需要通过我组织的一位客户(例如,拥有天蓝色广告租户ID“ ABCDEFG”)来获取已订阅的SKU。 我可以通过与上述相同的步骤在客户端的租户“ ABCDEFG”中注册一个应用程序来成功完成此操作。 如果我的组织有1个或2个客户,则此方法很好。 但是,如果客户端数量超过30个,则在每个Azure AD实例中注册应用程序的方法不可行。
如果我在我的组织AAD中注册的应用程序是多租户,那么应该如何帮助我? 获取每个租户的访问令牌需要采取哪些步骤? 有人可以协助详细解释吗?
答案 0 :(得分:2)
由于需要应用程序级别的访问权限,因此您将分配文档中列出的应用程序权限之一来获取SKU:https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/subscribedsku_list。
Directory.Read.All,Directory.ReadWrite.All
在这种情况下,您应该需要读取目录数据(Directory.Read.All)应用程序权限。
然后,您将应用标记为多租户。
现在,为了让另一个组织使用您的应用,必须先注册他们。 您将需要某种页面,管理员可以在其中单击按钮/链接以开始使用您的应用程序。 这应该将管理员重定向到:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=your-client-id&prompt=admin_consent&response_type=code+id_token&redirect_uri=url-where-to-send-user-back
登录后,他们会看到一个同意屏幕,他们可以在其中批准您的应用所需的权限。 如果这样做的时间和时间,它们将被重定向回您的应用程序(重定向到您指定的URL),并且您可以使用Id令牌知道注册了哪个Azure AD租户。
在此过程中,将在其租户中为您的应用创建服务主体,并为其授予必需的权限。 这意味着您可以从以下位置获取其租户的访问令牌:(使用相同的凭据)
https://login.microsoftonline.com/their-tenant-id/oauth2/token
请记住访问令牌是特定于Azure AD租户的,因此您将必须获取每个租户的访问令牌。
我想指出的一件事是,您应该尽可能尝试使用委派权限。 此处授予的应用程序权限可让您对应用程序进行相当大的访问,并且某些管理员可能仅出于该原因而无法使用您的服务。 委派的权限处理起来更为复杂,但允许您的应用代表用户执行操作,而不是纯粹代表用户执行操作。