我使用仅应用程序流程成功检索了 Microsoft Graph API 的访问 token ,但生成的 token 似乎无法访问任何内容。
这是我正在使用的身份验证代码:
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;
由此,我确实获得了一个 token ,但是当我尝试使用它时,它会抛出访问 token 验证失败。
这是我一直在使用的测试查询:
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
,也无济于事。
无论如何,鉴于有关验证失败的错误消息,
我开始相信我们的(可能是特定于租户的?)API URI 可能是错误的。会是这样吗?我没看到什么?
更新
该解决方案有两个组成部分。第一个是在接受的答案中提到的。第二个是范围应该是,简单地,https://graph.microsoft.com/.default
,尽管我的 API 调用是特定于租户的。
最佳答案
您在这里混淆了两个不同的 API。
graph.windows.net
URI 用于 Azure AD Graph,这是一个完全不同的 API。对于 Microsoft Graph,URI 应为 graph.microsoft.com
。
目前还没有 Microsoft Graph 的 /v2.0
。公开可用的版本是 /v1.0
和 /beta
。另请注意,使用 Microsoft Graph Client Library for .NET 时您不需要提供 baseUrl
,因为它已默认为 https://graph.microsoft.com/v1.0
。
关于microsoft-graph-api - 使用 Microsoft.Graph 库进行仅限应用程序的 Microsoft Graph 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390771/