我使用 VS 2015 创建了一个示例 MVC 应用程序并使用了 Azure AD 身份验证向导。当我启动此 Web 应用程序时,它要求我向 Azure AD 注册应用程序(仅限第一次),然后输入用户 ID/密码。我已输入 Office 365/Azure AD 帐户并成功登录。一切正常,在右上角,我可以看到 Hello“myname”。
现在我尝试使用 RestSharp 对 Office 365 进行 REST 调用。它给我403错误(访问被拒绝)
。
当我尝试使用图形 api url https://graph.windows.net/testname.com/groups?api-version=1.6
时,出现错误未经授权的访问
.
这是我的图形 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
始终为 true。
Azure、Office 365 和相关资源不是使用单一身份提供商 (AAD) 吗?
最佳答案
您的应用可能未配置为调用图形的 /groups
端点。当最终用户经过身份验证并且您已获得 Azure AD Graph (graph.windows.net
) 的 token 时,此访问 token 需要具有一组特定的权限才能调用终结点。
要配置这些图形权限,您可以转到 Azure Portal ,选择Azure Active Directory,然后应用注册,最后所需权限。您调用的资源是 Windows Azure Active Directory,然后您可以在范围列表中查找您想要调用的资源。
我推荐的另一个很棒的资源是 Azure AD Graph Explorer。这可以帮助理解图表可以提供的数据类型。
编辑:查看评论以获取答案。 OP 使用了 OpenID Connect 中间件 (OWIN),需要帮助获取资源的访问 token 。为此,您必须结合使用 OWIN + ADAL。 OWIN 获取身份验证代码,ADAL 可以将此身份验证代码交换为访问 token 。
关于用于调用 Office 365 和 Graph API REST 的 Azure AD 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174325/