Office365 API - 访问其他用户/房间的日历

jst*_*zik 15 php oauth exchangewebservices office365 outlook-restapi

我正在尝试构建一个可以访问组织的所有日历(用户,房间等)的应用程序.

目前,我的身份验证流程将代表租户用户登录,并使用刷新令牌来访问所需的资源.我一提出要求:

https://outlook.office365.com/api/v1.0/users/{room-resource@email}/events
Run Code Online (Sandbox Code Playgroud)

我的申请回复了 401

从我的收集来看,似乎这个流程仅限于单个用户的范围.虽然租户管理员应该有权查看任何房间资源,但该房间在技术上是用户本身,因此API将以禁止的错误进行响应.现在似乎正确的流程是租户管理员必须使用新的服务OAuth流授予我的应用程序权限.

通过阅读这篇文章,似乎API正在使用OAuth 客户端凭据授权类型(仅限应用程序令牌).而不是使用/oauth/common端点我现在必须使用/oauth/tenant-id我可以通过code+id_token响应类型中返回的JWT令牌检索.这导致了我的第一个问题:

使用OpenID流程是最初检索租户ID的唯一方法吗?

接下来是对我来说有点模糊的地方.

我们现在必须生成X.509 SSL证书并将指纹/值上传到我们的Azure应用程序清单.很容易.

然后根据Office 365 Rest API中的讨论- 守护进程周认证,我们构建一个特定的JWT,base64对其进行编码,并使用我们的证书进行签名.

我实际上没有完成最后几步,但我会在可以的时候发布我的结果.我只是确保我似乎正在遵循正在尝试访问的资源的正确程序.我知道服务令牌是一个相当新的功能,不幸的是我必须找到在Stackoverflow上发送已签名的JWT的流程,而不是官方的MSFT文档......

我还注意到,由于我们正在使用客户端凭据流,因此我们不会refresh_token在响应中收到.对于我的最后一个问题:

当访问不同的资源(即Graph API/Office365 API)时,我是否只使用签名请求为每个资源获取不同的访问令牌,而不是使用刷新令牌来获取多个资源

如果我似乎正在进行的总体方向是正确的,请告诉我!任何帮助是极大的赞赏.

Jas*_*ton 2

您正在走正确的道路。每个资源您将需要一个令牌,这将授予您对所有用户的访问权限。当该令牌过期时,您只需请求一个新令牌。