17

我被告知在这里提出一个关于 Azure AD Graph Api 的问题,而不是将其作为相应 GitHub 示例存储库的问题提出,我希望 Azure Graph API 团队监控 SO 并可以帮助我们解决这个 github 示例问题

该问题的一些额外背景:

我们正在使用 Microsoft.Azure.ActiveDirectory.GraphClient nuget 在我们的 Azure AD 测试租户中创建和管理用户。按照这个示例应用程序 ,我们可以通过 Graph API 在 Azure AD 中创建和更新用户。直到大约 2-3 天前发生的某个时刻之前都很好(不确定确切的时刻,我们在周二早上 AU 时间发现了问题。最后一次成功运行是在上周五)。它是 100% 的工作代码,并且确认它不是我们的代码 - 我再次运行了示例应用程序 - 它现在也坏了。我已经使用最新的 GraphClient v2.1.0 和来自示例应用程序的原始版本 - v2.0.6 对其进行了测试

为了简化对问题的测试,我制作了一个基于 LINQ 的示例,其中包含一些秘密(如果您想运行它,您需要按照控制台应用程序示例指南输入您的值,而不是原始示例应用程序)另外这里是 Fiddle捕获(编辑)的

提琴手捕获中需要注意的几件事 - Azure AD Graph API 不返回刷新令牌以及访问令牌:

{"expires_in":"3599","token_type":"Bearer","scope":"UserProfile.Read",
"expires_on":"1441183928","not_before":"1441180028","resource":"https://graph.windows.net",
"access_token":"TOKEN WAS HERE"}

我可以在这里看到范围字符串的问题,但是当按照示例应用程序调用令牌时,我们没有在 GraphClient 中设置任何显式范围(正如我之前提到的,这段代码之前很好)

用户创建响应清楚地说明发生了什么以及为什么会发生

{"odata.error":
    {"code":"Authorization_RequestDenied","message":
        {"lang":"en","value":"Insufficient privileges to complete the operation."}
    }
}

但目前尚不清楚如何通过任何这些AuthenticationContext.AcquireToken 方法重载来请求额外的权限范围。 同样奇怪的是,相同的代码之前功能齐全,现在在一些神秘的变化之后被破坏了?

所以我有几个问题:

  1. 如何在 GraphClient 库中添加额外的范围权限以在启用用户修改的情况下获取 Graph API 令牌。这可能是问题的创可贴解决方案。

  2. 看起来 Azure AD 尝试在门户中管理客户端应用程序的权限。但是对于 Native Client 类型的应用程序没有额外的权限。如何显式更新应用程序权限,以便现有代码可以再次工作。有可能吗?

  3. 任何人都可以推荐其他库与 GraphAPI 进行交互,从而允许消费者明确指定所请求令牌的范围吗?

================更新=================

是的,我看到了同意流程文档。为了解决这个问题,我创建了新的 Azure AD 租户,添加了全新的应用程序并添加了所有可能的权限,包括所有可用的应用程序和委托权限: 现在看起来像这样。我也

我可以得到一个范围很长的令牌,例如

Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All user_impersonation UserProfile.Read

--切掉不相关的范围--

但它仍然给我 403 :

{"odata.error":
    {"code":"Authorization_RequestDenied","message":        
        {"lang":"en","value":"Insufficient privileges to complete the operation."}
    }
}

值得注意的一件事 - 在范围列表中没有Directory.ReadWrite.All

但是这里的文档说Directory.ReadWrite.All:读写目录数据

================更新=================

PS:Azure AD 工程师的一些技术请求信息:

  • 身份验证请求响应具有客户端请求 ID:88b2bbbd-94cd-498d-a147-caad05e16eb7。
  • 失败的 Graph 调用仅在响应中具有 client-request-id: 882f3918-0ddd-40fe-a558-866997e32b46
4

1 回答 1

2

这里的问题是您没有正确配置您的应用程序以请求对 Graph API 的正确权限。为此,您必须进入 Azure 管理门户并配置您的“对其他应用程序的权限”,以包括您的应用程序需要能够读取/写入目录的范围。

我们这里有一些文档可以帮助您: https ://msdn.microsoft.com/en-us/library/azure/dn132599.aspx (描述同意流程) https://msdn.microsoft.com/Library/Azure /Ad/Graph/api/graph-api-permission-scopes(描述​​您的应用程序需要请求的图形 API 公开的特定权限)

我希望这有帮助!

于 2015-09-03T18:15:36.867 回答