我正在尝试使用以下代码通过 Graph API 版本 6.5.0 查找用户:
graphClient.users().byUserId("[email protected]").get()
但是我的查找失败了
com.microsoft.graph.models.odataerrors.ODataError: Resource '[email protected]' does not exist or one of its queried reference-property objects are not present.
我可以使用如下代码在用户 Outlook 日历中创建日历事件:
graphClient.users()
.byUserId("[email protected]")
.calendar()
.events()
.post(theEvent);
我猜测问题在于“其查询的引用属性对象之一不存在”。但我不知道这意味着什么。
我在正在使用的应用程序客户端上设置了以下权限:
如果您正在查询的用户不存在于 Microsoft Entra ID 租户中,通常会出现错误 “资源 '[email protected]' 不存在或其查询的引用属性对象之一不存在” .
在我的环境中,我创建了一个 Microsoft Entra ID 应用程序 并授予了
User.Read.All
API 权限,这是调用用户 API 所需的。
我使用了以下代码,能够使用 Microsoft Graph API 版本 6.5.0 成功获取用户详细信息:
package com.example;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.models.User;
import com.microsoft.graph.serviceclient.GraphServiceClient;
public class GraphApiExample {
public static void main(String[] args) {
final String clientId = "ClientID";
final String tenantId = "TenantID";
final String clientSecret = "ClientSecret";
final String userId = "[email protected]";
final String[] scopes = new String[] { "https://graph.microsoft.com/.default" };
final ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.tenantId(tenantId)
.clientSecret(clientSecret)
.build();
if (null == scopes || null == credential) {
throw new RuntimeException("Unexpected error");
}
final GraphServiceClient graphClient = new GraphServiceClient(credential, scopes);
try {
// Get the user by userId (email or userPrincipalName)
User user = graphClient.users().byUserId(userId).get();
System.out.println("User ID: " + user.getId());
System.out.println("User Display Name: " + user.getDisplayName());
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
如果问题仍然存在,请检查以下内容:
UPN
查询用户。否则,请尝试调用
UserCollectionResponse result = graphClient.users().get();
列出租户中所有用户的 API (而不是等待客户) 并检查您正在查询的用户是否存在。当您向应用程序授予 User.Read.All
API 权限时,此 API 将正常工作。