Azure AD - 具有守护程序服务身份验证流程的多租户,是什么限制了租户访问其他租户用户?

时间:2017-02-08 21:38:21

标签: azure daemon multi-tenant microsoft-graph azure-ad-graph-api

我创建了一个Service / Dameon应用程序来处理Microsoft Graph SDK的身份验证过程。我几乎创建了一个HttpWebRequest,并创建了一个我在我的应用程序中传递的网址secretclient_id生成了access_token。然后,此access_token与Microsoft Graph CSharp SDK一起用于对OneDrive for Business进行身份验证。

我已经成功地为单个租户证明了这一点,并且能够在文件和文件夹构面上撤回所有用户的OneDrive元数据。我的问题是,如果我想允许其他租户访问此应用程序,他们会看到哪些用户?

如果租户A 创建的应用程序会读取所有非全局管理帐户以撤回OneDrive for Business元数据,而租户B 则会创建自己的非 - 租户B 希望阅读的全球管理员帐户 - 将租户B 限制为只能访问自己的非全球用户列表的限制。

我唯一能想到的是租户B 需要创建自己的client_idsecret - 还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

  

我唯一能想到的是租户B需要创建自己的client_id和秘密 - 还有另一种方法吗?

在应用程序通过OAuth 2.0协议与Azure AD交互之前,我们需要为目标租户创建相应的服务主体。当我们在Azure门户上注册应用程序时,门户网站已经为开发人员的租户创建了服务主体

如果我们正在开发多租户应用,则其他租户的用户需要授予权限。用户同意后,将在用户中创建服务主体'租户。

另一种方式是,我们需要提供一种方法,使其他租户的用户能够同意。例如,我们可以使用授权代码授权流程。以下是供您参考的示例(请参阅here):

// Line breaks for legibility only

https://login.microsoftonline.com/common/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345

在用户创建服务主体之后'租户,我们需要使用用户的租户来获取下面的令牌

POST https://login.microsoftonline.com/{users' tenantId}/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=<clientId>
&client_secret=<clientSecret>
&resource=<resource>

以下是一些有用的文件供您参考:

Application and service principal objects in Azure Active Directory

How to sign in any Azure Active Directory (AD) user using the multi-tenant application pattern