Microsoft graph api 如何访问其他用户';通过图形API获取数据?

Microsoft graph api 如何访问其他用户';通过图形API获取数据?,microsoft-graph-api,azure-ad-graph-api,Microsoft Graph Api,Azure Ad Graph Api,使用Graph API和相关的身份验证/授权流,我如何访问组织中所有用户的数据?此外,多个组织/租户需要能够使用该应用程序 例如:我有一个应用程序需要从contoso.onmicrosoft.com下所有用户的所有日历中读取事件。我想要jack@contoso.onmicrosoft.com,管理员授权该应用程序,然后该应用程序将能够读取所述数据。使用托管API,这可以通过模拟轻松完成 然而,我正试图用Graph API和OAuth做同样的事情,但我找不到一个直接的解决方案,或者我肯定错过了一些

使用Graph API和相关的身份验证/授权流,我如何访问组织中所有用户的数据?此外,多个组织/租户需要能够使用该应用程序

例如:我有一个应用程序需要从contoso.onmicrosoft.com下所有用户的所有日历中读取事件。我想要jack@contoso.onmicrosoft.com,管理员授权该应用程序,然后该应用程序将能够读取所述数据。使用托管API,这可以通过模拟轻松完成

然而,我正试图用Graph API和OAuth做同样的事情,但我找不到一个直接的解决方案,或者我肯定错过了一些非常明显的东西。我已通过manage.windowsazure.com(多租户)创建了一个应用程序,并将其配置为需要Microsoft Graph API(所有应用程序和委派权限)

我做了以下工作:

GET https://graph.microsoft.com/v1.0/users/jack@contoso.onmicrosoft.com/messages
Headers: Authorization: Bearer <auth token from step #4>
GET https://graph.microsoft.com/v1.0/users/anyotheruser@contoso.onmicrosoft.com/messages
Headers: Authorization: Bearer <auth token from step #4>
1) 点jack@contoso.onmicrosoft.com朝向
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=&client_id=

2) 杰克授权该应用程序

3) 我返回:
/?code=&session\u state=

4) 我发送了一个如下的POST请求:

POST https://login.microsoftonline.com/common/oauth2/token
Headers: content-type: application/x-www-form-urlencoded

Body:
grant_type=authorization_code&code=<my auth code from step above>
&redirect_uri=<my redirect url>
&client_id=<my client id>
&client_secret=<my client secret>
&resource=https%3A%2F%2Fgraph.microsoft.com%2F

请使用仅应用程序身份验证流(请参阅)来使用应用程序权限-对于令牌请求(步骤4),您需要传递grant\u type=client\u凭据,而不是grant\u type=AUTHORITION\u code。

您引用的流/URL用于利用委托范围的授权代码流

A) 如果您希望应用程序仅对管理员有效(即访问所有日历),那么您使用的是正确的流程

B) 如果您希望在管理员同意后应用程序能为所有用户工作,则需要使用应用程序(客户端凭据)流和应用程序范围。这意味着您需要将同意从常规身份验证流中分离出来

要获得同意,您需要将管理员指向以下url:

GET https://login.microsoftonline.com/common/oauth2/authorize?resource=https://graph.microsoft.com/&client_id=<YourClientId>&client_secret=<YourClientSecret>&response_type=code&redirectUri=<YourRedirectUri>&prompt=admin_consent
如果没有任何结果,则表示没有人同意该申请

2.b(仅适用于具有委托作用域的身份验证代码流)使用GraphExplorer,并通过查询确认其中一个委托已被正确授权

beta/oauth2permissiongrants?$filter=clientId eq '[IdFrom ServicePrincipal in 2.a]' 
并确保您获得有关特定用户或“所有主体”的结果


有关应用程序与委派范围的更多信息,请参见此处:


有关应用程序流程的更多信息,请点击此处:

这很有帮助!我切换到只使用应用程序的版本(证书有一些问题,但最终解决了,没有证书)。看起来,关键是添加了
prompt=admin\u approve
,因为我以前尝试过这个流程,但没有成功。我确实对某些API调用有一些问题,但是有很多这样的空间。:)再次感谢!
POST https://login.microsoftonline.com/common/oauth2/token
body resource=https://graph.microsoft.com/&client_id=<YourClientId>&client_secret=<YourClientSecret>&response_type=code
beta/servicePrincipals?$filter=displayName eq '[YourApplicationName]'
beta/oauth2permissiongrants?$filter=clientId eq '[IdFrom ServicePrincipal in 2.a]'