我创建了一个Service / Dameon应用程序来处理Microsoft Graph SDK
的身份验证过程。我几乎创建了一个HttpWebRequest
,并创建了一个我在我的应用程序中传递的网址secret
和client_id
生成了access_token
。然后,此access_token
与Microsoft Graph CSharp SDK一起用于对OneDrive for Business进行身份验证。
我已经成功地为单个租户证明了这一点,并且能够在文件和文件夹构面上撤回所有用户的OneDrive元数据。我的问题是,如果我想允许其他租户访问此应用程序,他们会看到哪些用户?
如果租户A 创建的应用程序会读取所有非全局管理帐户以撤回OneDrive for Business元数据,而租户B 则会创建自己的非 - 租户B 希望阅读的全球管理员帐户 - 将租户B 限制为只能访问自己的非全球用户列表的限制。
我唯一能想到的是租户B 需要创建自己的client_id
和secret
- 还有另一种方法吗?
答案 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