美好的一天!
我们需要一个日历工具来处理我们当前正在处理的项目。由于某些原因,我们仅限于使用Office 365日历或Outlook日历。我们偶然发现了Microsoft Graph API,这似乎是实现我们想要做的正确工具。因此,我们的想法是创建一个Microsoft帐户,该帐户将用作主日历,我们的包装器(用于包装Microsoft图形API调用)将可以从该日历中提取事件,并最终将其分发给客户端请求。
这就是到目前为止我们所做的:
我们同意创建一个包装器API,该包装器将调用Microsoft Graph API,但在此之前,我们尝试通过邮递员访问所述API。问题在于邮递员无法从/ authorize API的端点获得任何响应,而该端点需要获得访问令牌才能最终调用相应的Microsoft graph API。
现在我们不知道我们是否试图错误地进行攻击或进行其他任何攻击。您知道我们在这里缺少什么吗?在此先感谢您,我希望有人能对此事有所启发。
更新:
我们取得了一些进展。一段时间后,我们碰到了Azure活动目录门户。现在,我们可以使用此URL获取访问令牌。
https://login.microsoftonline.com/<directory-id>/oauth2/token
现在,当我们访问应该调用的实际MS Graph API端点时,即使我们正在使用从上一个API调用获得的令牌,也将收到 401未经授权响应。这是我们试图获得响应的URL:
https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2018-08-01T00:00:00.0000000&endDateTime=2018-08-31T23:59:59.0000000
这些都是先通过邮递员完成的。
更新:
我们尝试授予Azure Active Directory门户中所有可能的权限,并在以下位置确认同意
https://login.microsoftonline.com/<domain>.onmicrosoft.com/adminconsent?client_id=<client-id>
但不幸的是,我们仍然遇到401 Unauthorized墙。在Microsoft Graph Explorer中,一切正常。那么,在我们的邮递员实现中,MS Graph Explorer隐式做了什么?预先感谢您的帮助!
更新
进一步阅读后,我们发现了一些重要的细节。首先,我们发现Microsoft提供了两组API。一种是Azure Active Directory API,另一种是Microsoft Graph API。这两个API使用相同的URL来通过客户端凭据获取访问令牌。以下是网址:
https://login.microsoftonline.com/<directory-id>/oauth2/v2.0/token
使用Azure门户中的个人数据替换。使用此URL获取访问令牌,您需要在请求正文中提供一些数据。
我们现在可以获取访问令牌,并使用它来访问所需的实际API。以下是上述API的网址:
https://graph.microsoft.com/v1.0/users/<azure-tenant-name>.onmicrosoft.com/calendar/calendarView?startDateTime=2018-08-01T00:00:00.0000000&endDateTime=2018-08-31T23:59:59.0000000
请注意,该URL不使用/me
,因为使用该URL时需要登录用户。不幸的是,我们仍然收到401未经授权的错误,但现在这些错误确实发生了变化。我们断断续续地犯错误。有时,API调用会交替返回一个或另一个。下面是API调用的返回。
{
"error": {
"code": "InvalidTenant",
"message": "The tenant for tenant guid '<directory-id-goes-here>' does not exist.",
"innerError": {
"request-id": "<some-request-id>",
"date": "2018-08-22T04:29:27"
}
}
}
{
"error": {
"code": "UnknownError",
"message": "",
"innerError": {
"request-id": "<some-request-id>",
"date": "2018-08-22T04:54:11"
}
}
}
我们认为我们已经向前迈进了一步。我们仍然没有得到我们需要的东西。现在,这两个API调用响应是个谜。这可能是什么原因?预先感谢任何人的帮助
更新
在进一步阅读后,我们发现存在用于获取访问令牌的身份验证流程。根据您要调用的API,某些身份验证流将无法使用,因为它们需要更多详细信息和安全性才能执行自己。所以我们尝试了:
但是,不幸的是,我们仍然陷于先前的错误中。我们收到 401未经授权的消息,响应有效载荷为InvalidTenant
或UnknownError
。
答案 0 :(得分:1)
昨天我刚刚遇到了类似的问题,即401未经授权错误。
我试图通过Microsoft的Graph API访问员工的日历,但收到的回复与您相同。
请求:
https://graph.microsoft.com/v1.0/users/employee-email/calendarview?startdatetime=2018-10-21T00:00:00Z&enddatetime=2018-10-27T23:59:59Z&$select=subject,categories,start,end,sensitivity
响应:
{
"error": {
"code": "UnknownError",
"message": "",
"innerError": {
"request-id": "<request-id>",
"date": "<date>"
}
}
}
然后我决定检查是否有Office365。他没有。我只是一名开发人员,所以我请基础结构人员在empleyee的计算机上安装Office 365,或将其添加到enterprice帐户中。
完成后,对他的日历的请求就可以了:)