Microsoft Graph:如何让所有组重用通过ADAL生成的令牌

时间:2017-06-07 14:57:11

标签: c# azure azure-active-directory microsoft-graph adal

我试图使用Microsoft Graph,我在这里有点迷失。我通过AuthenticationContext.AcquireTokenAsync方法使用ADAL验证我的应用程序(app id + secret)。代码如下所示:

AuthenticationContext AuthContext = new AuthenticationContext(Authority);
ClientCredential ClientCredential = new ClientCredential(ClientId, AppKey);
var result = await AuthContext.AcquireTokenAsync(
                                        "https://graph.windows.net", 
                                        ClientCredential);

现在,如果我使用Azure Graph重用令牌,我可以使用此代码恢复所有组:

var url = $"https://graph.windows.net/myorganization/groups?api-version=1.6";
 var client = new HttpClient();
 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultAccessToken);
  var response = await client.GetAsync(url);
  if (response.Content != null) {
       Console.WriteLine(await response.Content.ReadAsStringAsync());
  }

根据文档,我应该使用较新的Microsoft Graph API,但是当我尝试使用以下代码时,我遇到了一些问题:

var authenticationProvider = new DelegateAuthenticationProvider(
      req.Headers.Authorization = new AuthenticationHeaderValue("bearer", 
                                           resultAccessToken.AccessToken);
      return Task.CompletedTask;
});
var graph = new GraphServiceClient(authenticationProvider);
var groups = await graph.Groups
                    .Request()
                    .GetAsync();

每当我运行它时,我最终得到以下异常:

未处理的异常:System.AggregateException:发生了一个或多个错误。 ---> Microsoft.Graph.ServiceException:代码:InvalidAuthenticationToken 消息:访问令牌验证失败。

很明显,我在这里遗漏了什么,但是什么? (顺便说一下,我已经设法让所有东西都与MSAL库一起工作,但在这种情况下,我真的需要将我的组件与使用ADAL的其他组件集成),

感谢。

路易斯

1 个答案:

答案 0 :(得分:2)

AAD Graph和Microsoft Graph具有不同的物理端点。

要拨打AAD图表,您需要一个包含受众群体声明https://graph.windows.net

的令牌

要调用Microsoft Graph,您需要一个包含受众群体声明https://graph.microsoft.com

的令牌

这意味着你需要做两件事:

  1. 确保您的应用程序配置为Microsoft Graph。 (这意味着您需要更新应用程序的配置以调用其他资源)
  2. 更新代码以请求正确资源的令牌。
  3. 我希望这有帮助!