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

时间:2015-09-02 08:48:52

标签: 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 < / p>

问题的一些额外背景:

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

为了简化测试问题,我已经a LINQ based sample修改了一些秘密(如果你想运行它,你需要按照控制台应用程序示例指南输入你的值,而不是原始的示例应用程序)

这里还有小提琴捕获(编辑)

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

我可以在这里看到范围字符串的问题,但是在按照Sample app调用token时,我们没有在GraphClient中设置任何explict范围(之前我提到过此代码很好)

用户创建响应在发生的事情及其发生的原因方面很清楚

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

但目前尚不清楚如何通过其中任何AuthenticationContext.AcquireToken Method overloads请求额外的权限范围 同样令人奇怪的是,同样的代码之前完全正常运行并且在经历了一些神秘的变化后现在被破坏了吗?

所以我几乎没有问题:

  1. 如何在GraphClient库中添加额外的范围权限以获取启用了用户修改的Graph API令牌。这可能是解决问题的乐队援助。

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

  3. 有人可以推荐其他库与GraphAPI交互,这允许消费者明确指定所请求令牌的范围吗?

  4. =====更新=====

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

    我可以获得一个包含长列表范围的令牌,例如

      

    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工程师的一些技术请求信息:

    • 身份验证请求 - 响应具有client-request-id:88b2bbbd-94cd-498d-a147-caad05e16eb7。
    • 失败的图形调用具有client-request-id:882f3918-0ddd-40fe-a558-866997e32b46仅作出回应

1 个答案:

答案 0 :(得分: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公开您的应用程序需要请求的特定权限)

我希望这有帮助!