我被告知在这里提出一个关于 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 方法重载来请求额外的权限范围。 同样奇怪的是,相同的代码之前功能齐全,现在在一些神秘的变化之后被破坏了?
所以我有几个问题:
如何在 GraphClient 库中添加额外的范围权限以在启用用户修改的情况下获取 Graph API 令牌。这可能是问题的创可贴解决方案。
看起来 Azure AD 尝试在门户中管理客户端应用程序的权限。但是对于 Native Client 类型的应用程序没有额外的权限。如何显式更新应用程序权限,以便现有代码可以再次工作。有可能吗?
任何人都可以推荐其他库与 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