调用 Office 365 和 Graph API REST 的 Azure AD 身份验证

Azure AD authentication to call Office 365 and Graph API REST

我使用 VS 2015 创建了一个示例 MVC 应用程序并使用了 Azure AD 身份验证向导。当我启动此 Web 应用程序时,它要求我向 Azure AD 注册应用程序(仅限第一次),然后 userid/password。我已进入 Office 365/Azure AD 帐户并成功登录。一切正常,在右上角,我可以看到 Hello "myname".

现在我尝试使用 RestSharp 对 Office 365 进行 REST 调用。它给了我 403 error (access denied).

当我尝试使用图表 api url https://graph.windows.net/testname.com/groups?api-version=1.6 时,出现错误 unauthorized access.

这是我的测试代码,带有图形 API 调用:

 string url = "https://graph.windows.net/testname.com/groups?api-version=1.6";
            var client = new RestClient(url);
            client.ClearHandlers();
            var jsonDeserializer = new JsonDeserializer();
            client.AddHandler("application/json", jsonDeserializer);
            var request = new RestRequest(Method.GET);
            var queryResult = client.Execute(request);

我使用与 O365 REST 相同的代码 url 进行 Office 365 调用。

如果我的应用程序已经针对作为基本身份验证的 Azure AD 进行了身份验证,为什么我在这两种情况下都被拒绝访问。此外 Request.IsAuthenticated 始终为真。

Azure、Office 365 和相关资源不是使用单一身份提供程序 (AAD) 吗?

您的应用可能未配置为调用图形的 /groups 端点。虽然最终用户已通过身份验证并且您已获得 Azure AD Graph 的令牌 (graph.windows.net),但此访问令牌需要具有一组特定的权限才能调用端点。

要配置这些图形权限,您可以转到 Azure Portal、select Azure Active Directory,然后 App Registrations,最后 所需权限 。您调用的资源是 Windows Azure Active Directory,然后您可以查看要调用的范围列表。

我要推荐的另一个重要资源是 Azure AD Graph Explorer。这有助于理解图形可以提供的数据类型。

编辑: 查看评论以获取答案。 OP 使用了 OpenID Connect 中间件 (OWIN),需要帮助获取资源的访问令牌。为此,您必须结合使用 OWIN + ADAL。 OWIN 获得授权码,ADAL 可以用此授权码交换访问令牌。