C# Azure AD Graph用户创建调用失败,出现一些模糊错误

C# Azure AD Graph用户创建调用失败,出现一些模糊错误,c#,azure,oauth-2.0,azure-active-directory,azure-ad-graph-api,C#,Azure,Oauth 2.0,Azure Active Directory,Azure Ad Graph Api,我被告知在这里提出一个关于Azure AD Graph Api的问题,而不是将其作为相应GitHub示例存储库的问题提出,我希望Azure Graph Api团队能够监督并帮助我们解决这个问题 问题的一些额外背景: 我们正在使用Microsoft.Azure.ActiveDirectory.GraphClient nuget在Azure AD测试租户中创建和管理用户。下列的 我们可以通过Graph API在Azure广告中创建和更新用户。直到大约2-3天前的某个时刻(不确定确切的时间,我们在周二

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

问题的一些额外背景:

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

为了简化对问题的测试,我编辑了一些秘密(如果您想运行控制台应用程序示例指南,您需要按照控制台应用程序示例指南输入值,而不是原始示例应用程序) 此外,这是小提琴捕捉(编辑)的

fiddler捕获中需要注意的几点-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."}
    }
}
但目前还不清楚如何通过其中任何一个请求额外的权限范围 同样奇怪的是,同样的代码以前功能齐全,但经过一些神秘的改变,现在却被破坏了

因此,我有几个问题:

  • 如何在GraphClient库中添加额外的作用域权限,以在启用用户修改的情况下获取Graph API令牌。这可能是一个解决问题的创可贴

  • Azure AD似乎试图在中管理客户端应用程序的权限。但是对于本机客户端类型的应用程序没有额外的权限。如何显式更新应用程序权限,使现有代码可以再次工作。有可能吗

  • 有人能推荐其他库与GraphAPI交互吗?GraphAPI允许使用者显式指定所请求令牌的作用域

  • ===================更新================

    是的,我看到了同意流文档。为了解决这个问题,我创建了新的Azure广告租户,添加了全新的应用程序,并添加了所有可能的权限,包括所有可用的应用程序和授权: . 我也

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

    Directory.AccessAsUser.All 目录。请阅读 目录。写入 用户阅读 User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All 用户模拟 UserProfile.Read

    --切割无关范围--

    但它仍然给了我403:

    {"odata.error":
        {"code":"Authorization_RequestDenied","message":        
            {"lang":"en","value":"Insufficient privileges to complete the operation."}
        }
    }
    
    有一件事值得注意-在范围列表中没有目录.ReadWrite.All

    : 目录.ReadWrite.All:读取和写入目录数据

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

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

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

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

    我们这里有一些文档可以帮助您: (描述同意流) (描述应用程序需要请求的graph API公开的特定权限)


    我希望这有帮助

    一些额外信息-根据oauth2规范(4.4.2.访问令牌请求),尝试发布类似scope=xxx的范围。使用此列表中的范围值&scope=Directory.ReadWrite.All getting back token with the same“UserProfile.Read”scope.managed获得具有多个权限的令牌(通过将Office 365统一API预览应用程序添加到我的web客户端,并将所有可能的权限委派添加到我的应用程序)。仍然不走运-将与原始fiddler请求相同的数据发布到HTTP/1.1仍然会给我403“没有足够的权限来完成操作”。ocp aad诊断服务器名称:2+DALFFSDN9J1PBJWETFSEVFN5Y/lnZw/QCyG+ljYA=请求id:70f46089-1a05-41d3-85c6-e90e1c0f75dd客户端请求id:5dec4e74-ac5d-4944-8ca6-01644C32BF93不多。查看更新的详细信息-我已经完成了更多步骤并获得了具有最大可用权限的令牌-仍然相同。嗨,Alexey。我只是想跟进一下,很抱歉没能早点回来。对于示例,您是仅作为应用程序还是作为具有用户上下文的应用程序发出访问请求?在前一种情况下,您应该在“应用程序权限”列中设置“读写目录”权限。如果是后者,则应在“委派权限”列中设置相同的权限,并且用户必须具有足够的权限来创建用户(因此租户管理员或用户帐户管理员)。如果这不起作用,请转发您解码的JWT令牌的scp声明,这样我们就可以看到这些声明。嗨,丹,我们已经从那个问题上转移了,但我将尝试回到它,并恢复环境以重现这个问题。我认为最简单的情况是运行这个示例——它对我的租户也不起作用——无论是原始的还是新创建的。