c# - Azure AD Graph 对用户创建的调用失败并出现一些模糊错误

标签 c# azure oauth-2.0 azure-active-directory azure-ad-graph-api

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

问题的一些额外背景:

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

为了简化我提出的问题的测试a LINQ based sample编辑了一些 secret (如果您想运行它,您需要按照控制台应用程序示例指南输入您的值,而不是原始示例应用程序) 另外,这里是 Fiddle 捕获(已编辑)

fiddler 捕获中需要注意的几点 - Azure AD Graph API 不会返回刷新 token 和访问 token :

{"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"}

我可以在此处看到作用域字符串的问题,但在按照示例应用程序调用 token 时,我们没有在 GraphClient 中设置任何显式作用域(正如我之前提到的,此代码之前很好)

用户创建响应很清楚发生了什么以及为什么发生

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

但尚不清楚如何通过这些 AuthenticationContext.AcquireToken Method overloads 请求额外的权限范围 另外,奇怪的是,同样的代码以前功能齐全,但经过一些神秘的更改后现在就被破坏了?

所以我有几个问题:

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

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

  3. 任何人都可以推荐其他库来与 GraphAPI 交互,从而允许消费者显式指定所请求 token 的范围吗?

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

是的,我看到了同意流程文档。为了解决这个问题,我创建了新的 Azure AD 租户,添加了全新的应用程序并添加了所有可能的权限,包括所有可用的应用程序和委派权限: now it looks like this 。我也

我可以获得一个具有长范围列表的 token ,例如

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

But here docs says : Directory.ReadWrite.All:读写目录数据

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

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

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

最佳答案

这里的问题是您没有正确配置您的应用程序来请求对 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 公开的特定权限)

希望这会有所帮助!

关于c# - Azure AD Graph 对用户创建的调用失败并出现一些模糊错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32348597/

相关文章:

meteor - "415 Error"查询 Spotify token 时

c# - 仅填充相关对象的 ID 时不加载导航属性

c# - 如何用静态方法模拟?

azure - 如何限制/限制 Azure Active Directory 中的 CallRecords.read.all API 权限

asp.net - 如何将 Asp.Net 身份验证与 Azure AD 身份验证连接

angularjs - 从本地存储中清除 token 就足够了吗?由于不活动而造成 session 超时的效果?

C# 十进制数据类型性能

c# - Windows Universal 10 中的饼图

azure - 对资源组执行验证操作所需的角色

session 与访问 token + 刷新 token