我希望能够 - 从 3 日的克罗恩工作开始。派对服务器 - 查询和修改我的租户(组织)日历中的所有用户 - 但我最终得到一个我不知道该怎么处理的“应用程序 ID URI”。
无论我如何查询 microsoft graph API,我都会得到“Invalid Audience”,而关于该主题的文档似乎并没有真正强调如何准确地指定正确的“audience”或“resource”实际上需要什么。
这些是我在 Azure Active Directory 门户中采取的步骤:
我使用客户端凭据授予流程,因此我可以使用 Cron 而不是通过用户访问。https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow
1) 在门户中注册了一个应用程序。所以我得到了一些身份证(这里匿名)
Application (client) ID
:
51ed7b6d-d33e-491e
Directory (tenant) ID
:
c181f4f3-912b-4acf-
Object ID
:
3f52a799-f2ab-4161-a81c
2)创建了一个秘密,因此我可以将其与应用程序 ID 一起提供以获取令牌。
3) 将“Api 应用程序权限”授予https://graph.microsoft.com/Calendars.ReadWrite。
4)“公开一个 API”并将其范围称为“读写日历”,因此范围的应用程序 ID URI 最终为:api://51ed7b6d-d33e-491e-9d40-1/readwritecalendars
5) 使用步骤 1 中的应用程序(客户端)ID 将 API 授权给应用程序,因此我不需要管理员同意即可查询。
问题是现在我只得到了一个“应用程序 ID URI”,那么我该如何准确地查询我的日历呢?
我在这里使用https://github.com/TheNetworg/oauth2-azure:
我能够成功获得令牌:
$provider = new \TheNetworg\OAuth2\Client\Provider\Azure([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => 'http://www.google.dk'
]);
$provider->tenant = 'secret';
$token = $provider->getAccessToken('client_credentials', [
'resource' => 'https://graph.windows.net',
]);
$provider->urlAPI = "https://graph.microsoft.com/v1.0/";
$provider->resource = "https://graph.microsoft.com/";
return $token ;
给我:
{
"token_type": "Bearer",
"ext_expires_in": "3600",
"expires_on": "1562669834",
"not_before": "1562665934",
"resource": "https://graph.windows.net/",
"access_token": "longstringofnumbers",
"expires": 1562269224
}
没有返回“Aud”或“Audience”字段。
这是我感到困惑的地方,我究竟如何形成一个链接,我怎么说我想用令牌查询所有日历?
查看它指定的 Outlook 图形文档,我需要像这样查询(https://docs.microsoft.com/en-us/graph/api/user-list-calendars?view=graph-rest-1.0&tabs=http) :
GET /me/calendars
这对我来说真的没有意义,因为“我”似乎暗示着一个用户,我试图查询一个不与特定用户绑定的租户中的东西?
无论如何,如果我尝试像这样查询:
$provider->get('me/calendars',$token);
或者我刚刚得到的不同组合:
Access token validation failure. Invalid audience.
总而言之:我如何实际查询 API 以列出/修改日历,我必须点击的实际端点是什么?我在哪里放置实际查询?
提前致谢!
结果将是 JSON 对象而不是错误消息。成功返回查询。在这种情况下,所有用户日历的列表,或修改日历后的“成功更新”。