从守护程序应用程序访问租户Microsoft Graph

时间:2017-01-26 09:24:21

标签: azure-active-directory microsoft-graph azure-ad-graph-api

我正在开发一个守护程序应用程序,它与Microsoft 365 Office Planner交互以操作Microsoft Graph任务。当我调用Microsoft Graph API来获取与我的租户相关的任务时,我收到了一个未经授权的请求异常。

我已在Azure Active Directory中注册了我的应用程序,并授予其使用Microsoft Graph的权限。

我从这里请求基于进程的访问令牌: https://graph.microsoft.io/en-us/docs/authorization/app_only

我可以从Azure Active Directory v2.0端点获取令牌。 请求代码如下:

 new KeyValuePair<string, string>("grant_type", "client_credentials"),
         new KeyValuePair<string, string>("client_id", "<clent id>"),
         new KeyValuePair<string, string>("client_secret", "<client secret>"),
         new KeyValuePair<string, string>("resource", @"https://graph.microsoft.com")
     var content = new FormUrlEncodedContent(pairs);

     var response = client.PostAsync("https://login.microsoftonline.com/<tenant id>/oauth2/token", content).Result;

当我使用此访问令牌执行以下请求时:

     client.DefaultRequestHeaders.Authorization= new AuthenticationHeaderValue("Bearer", token);

     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

     var response = client.GetAsync(@"https://graph.microsoft.com/beta/tasks").Result;         

我通过以下回复消息获得状态代码401 Unauthorized:

Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the credentials that you supplied.

我是否有任何授权流程未授权访问我的应用。请帮忙!!!!

提前致谢!!

1 个答案:

答案 0 :(得分:0)

根据测试,似乎Microsoft Graph不支持使用仅限app令牌列出任务。在我向应用授予Group.ReadAll app权限后,我收到了如下错误请求:

GET:https://graph.microsoft.com/beta/tasks?$filter=createdBy+eq+'xx@xxxx.onmicrosoft.com'

enter image description here

但是,使用具有相同权限的委托令牌成功调用了请求: enter image description here

作为解决方法,您可以检查 OAuth2代码授予流程是否对您的方案有用。

其他用户已经使用仅限应用令牌提出了有关列出任务的反馈,如果您还需要此功能,则可以从here投票反馈。