如何使用联系人和日历资源诊断图权限问题

时间:2018-12-20 19:01:34

标签: microsoft-graph

在访问特定用户的图形资源时遇到问题。大多数没有问题。该特定用户通过他们的学校Outlook帐户向我们的客户进行身份验证,我认为这是问题所在。

我们的服务尝试使用/me/contactFolders端点创建一个特定的文件夹。发布帖子时,出现错误the resource could not be discovered。稍微钻研一下,我决定用他们的帐户登录Graph资源管理器,并且无法查询端点/me/contacts/me/contactFolders/me/events等。没有提供任何示例努力获取任何数据。我假设这与用户帐户的许可有关,但是我不确定他们访问日历和联系人都需要什么权限(我们正在正确设置范围和委托权限,因为此问题仅与几个用户有关)

这是我尝试查询图形时收到的错误消息:

{
    "error": {
        "code": "ResourceNotFound",
        "message": "Resource could not be discovered.",
        "innerError": {
            "request-id": "5cfd7b28-a915-42cf-9bce-a8a2509c3f1f",
            "date": "2018-12-20T18:48:34"
        }
    }
}

在诊断此问题方面的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果您无法解码令牌,则很可能会遇到以下问题之一:

  1. 您不正确地获得了令牌

  2. 您正在尝试解码授权码,而不是访问令牌(即,您从第一个OAuth步骤而不是第二个OAuth步骤获得的字符串)。

  3. 令牌用于Microsoft帐户(也称为MSA,也称为Xbox或Outlook.com帐户)。

您只能解码Azure AD(AAD)发行的令牌。学校帐户(即以.edu结尾的帐户)与工作帐户基本相同,它们由Azure Active Directory拥有和管理。

就检查为当前用户提供了哪些服务而言,只要您请求了/meUser.Read范围,就可以从User.ReadWrite端点获得这些服务。请注意,默认情况下不包含此信息,因此您需要专门请求provisionedPlans。例如,以下查询将返回当前用户的iduserPrincipalName及其列表provisionedPlans(即服务):

https://graph.microsoft.com/v1.0/me/?$select=id,userPrincipalName,provisionedPlans

结果是不言自明的,但是在特定情况下,您正在寻找名为exchange的服务(通常有多个服务,但它们都应反映相同的状态):

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,userPrincipalName,provisionedPlans)/$entity",
    "id": "48d31887-5fad-4d73-a9f5-3c356e68a038",
    "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
    "provisionedPlans": [
        {
            "capabilityStatus": "Enabled",
            "provisioningStatus": "Success",
            "service": "exchange"
        },