我使用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调用是特定于租户的。
答案 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
。