我正在尝试构建一个可以访问组织所有日历(用户、房间等)的应用程序。
目前,我的身份验证流程将代表租户用户登录并使用刷新令牌来访问所需的资源。一旦我提出要求:
https://outlook.office365.com/api/v1.0/users/{room-resource@email}/events
我的申请得到了回应401
从我的收集来看,这个流程似乎仅限于单个用户的范围。尽管租户管理员应该有权查看任何房间资源,但从技术上讲,房间本身就是一个用户,因此 API 将响应一个禁止的错误。现在看来,正确的流程是租户管理员必须使用新的Service OAuth Flow向我的应用程序授予权限。
通读这篇文章,API 似乎正在使用 OAuth客户端凭据授予类型(仅限应用程序令牌)。/oauth/common
我现在必须使用/oauth/tenant-id
可以通过code+id_token
响应类型中返回的 JWT 令牌检索的端点,而不是使用端点。这引出了我的第一个问题:
使用 OpenID 流程是最初检索租户 ID 的唯一方法吗?
接下来是事情对我来说有点模糊的地方。
我们现在必须生成 X.509 SSL 证书并将指纹/值上传到我们的 Azure 应用程序清单。很容易。
然后根据Office 365 Rest API - Daemon week authentication中的讨论,我们构建一个特定的 JWT,对其进行 base64 编码,并使用我们的证书对其进行签名。
我实际上还没有到达这里的最后几个步骤,但我会尽可能发布我的结果。我只是确保我似乎在遵循正确的程序来尝试访问哪些资源。我知道服务令牌是一个相当新的功能,不幸的是我不得不在 Stackoverflow 上找到发送签名 JWT 的流程,而不是官方的 MSFT 文档......
我还注意到,由于我们使用的是客户端凭据流,因此我们不会refresh_token
在响应中收到 a 。所以对于我的最后一个问题:
当访问不同的资源(即 Graph API/Office365 API)时,我是否只是使用我的签名请求为每个资源获取不同的访问令牌,而不是对多个资源使用刷新令牌?
如果我的大致方向似乎是正确的,请告诉我!任何帮助是极大的赞赏。