gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:55:29 27 4
gpt4 key购买 nike

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

目前我的身份验证流程将代表租户用户登录并使用刷新 token 来访问所需的资源。一旦我提出请求:

https://outlook.office365.com/api/v1.0/users/{room-resource@email}/events

我的申请得到了 401

的响应

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

通读这篇文章,API 似乎正在使用 OAuth client credentials grant type (仅限应用程序 token )。我现在必须使用 /oauth/tenant-id 而不是使用 /oauth/common 端点,我可以通过 code+ 中返回的 JWT token 检索它id_token 响应类型。这就引出了我的第一个问题:

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

接下来是我觉得有点模糊的地方。

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

然后根据Office 365 Rest API - Daemon week authentication中的讨论我们构建一个特定的 JWT,对其进行 base64 编码,并使用我们的证书对其进行签名。

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

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

当访问不同的资源(即 Graph API/Office365 API)时,我是否只是使用我的签名请求而不是 using refresh tokens for multiple resources 为每个资源获取不同的访问 token ? ?

如果我似乎要走的大方向是正确的,请告诉我!非常感谢任何帮助。

最佳答案

晚会迟到了,但我也一直在努力解决这个问题,这就是我的发现。

进入 Office365 的 OAuth 路由将只允许您访问自己的日历。应用程序在 Azure 中拥有什么权限,或者您为每个用户配置什么都无关紧要。这是 API 的限制。

MSFT 在对此 StackOverflow 问题的评论中证实了这一点:
Office365 API - Admin accessing another users/room's calendar events

但是,您可以使用基本身份验证来访问其他人的日历。

1) 配置“主要”用户(您通过身份验证的用户)可以访问“次要”用户(具有您要查看的日历的用户)的帐户。为此,请进入次要用户的 Exchange 属性 -> 邮箱委派并授予主要用户完全访问权限。

2) 将身份验证连同请求传递给 Office365 API:

<?php
$username = 'primary@user.com';
$password = 'mypass';
$URL = 'https://outlook.office365.com/api/v1.0/users/secondary@user.com/events';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result=curl_exec ($ch);
curl_close ($ch);

print_r($result);

?>

3) 如果您做对了所有事情,您现在就有了次级用户的事件!

关于php - Office365 API - 访问其他用户/房间的日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29519134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com