使用Microsoft.Graph库的仅限应用程序的Microsoft Graph身份验证

时间:2018-01-22 21:47:04

标签: microsoft-graph

我使用App-Only流程成功检索Microsoft Graph API的访问令牌,但生成的令牌似乎无法访问任何内容。

以下是我正在使用的身份验证码:

var clientApp = new ConfidentialClientApplication(
    identifier,
    authority,
    "urn:ietf:wg:oauth:2.0:oob",
    new ClientCredential(secret), null, null);
var scopes = new string[] { $"{identifier}/.default" };
AuthenticationResult authResult = await clientApp.AcquireTokenForClientAsync(scopes);
return authResult.AccessToken;

从那以后,我确实得到了一个令牌,但是当我尝试使用它时,它会抛出Access token validation failure.这是我一直在使用的测试查询:

var users = service.Users.Request()
    .Filter($"mail eq '{resourceIdentifier}'")
    .Top(1)
    .GetAsync();
users.Wait();

对于API baseUrl,我提供了:https://graph.windows.net/{appId}。我确实将api-version=1.6添加到查询字符串中(手动,因为我没有看到通过Microsoft.Graph NuGet库公开的选项)。我之前尝试过https://graph.microsoft.com/v2.0,也无济于事。

无论如何,鉴于有关validation failure,的错误消息,我开始相信我们的(可能是特定于租户的?)API URI可能是错误的。可能是吗?我没看到什么?

更新

该解决方案有两个组成部分。第一个是在接受的答案中提到的。第二个是范围应该是https://graph.microsoft.com/.default,尽管我的API调用是特定于租户的。

1 个答案:

答案 0 :(得分:2)

您在此处将两种不同的API混为一谈。

graph.windows.net URI用于Azure AD Graph,它是一个完全不同的API。对于Microsoft Graph,URI应为graph.microsoft.com

今天还没有{Graphis}的/v2.0。公开发布的版本为/v1.0/beta。另请注意,使用Microsoft Graph Client Library for .NET时,您不需要提供baseUrl,因为它已默认为https://graph.microsoft.com/v1.0