当前位置: 首页 > 知识库问答 >
问题:

Office 365 通过图形 API 访问

夹谷硕
2023-03-14

我在通过Microsoft Graph API访问我的office 365帐户时遇到了一个(或两个)问题。

第一个问题是我有一个java程序,它试图列出office365订阅中的所有用户。我打电话给https://graph.microsoft.com/v1.0/users/,但返回403禁止

在应用注册中,我添加了权限,包括 User.ReadUser.ReadBasic.All、User.ReadWrite 对委派权限和应用权限。

我也尝试使用图形资源管理器,但是当我输入使用我的帐户时,它仍然使用内置的图形用户,并且不显示我的应用程序登录信息。不确定这些是否相关。

下面是导致 403 的代码片段

AuthenticationResult result = getAccessTokenFromUserCredentials(RESOURCE_GRAPH, ID, PASSWORD);

URL url = new URL("https://graph.microsoft.com/v1.0/users/")   ;

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Bearer "+result.getAccessToken());
if (conn.getResponseCode() != 200) {
    throw new RuntimeException("Failed : HTTP error code : "
            + conn.getResponseCode());
}

下面是获取令牌的方法

private static AuthenticationResult getAccessTokenFromUserCredentials(String resource,
                                                                          String username, String password) throws Exception {
        AuthenticationContext context;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {
            service = Executors.newFixedThreadPool(1);
            context = new AuthenticationContext(AUTHORITY, false, service);
            Future<AuthenticationResult> future = context.acquireToken(
                    resource, CLIENT_ID, username, password,
                    null);
            result = future.get();
        } finally {
            service.shutdown();
        }

        if (result == null) {
            throw new ServiceUnavailableException(
                    "authentication result was null");
        }
        return result;
    }

共有2个答案

干照
2023-03-14

好吧,我想我应该把答案贴出来。首先,也是最令人困惑的是apps.dev.microsoft。com注册似乎不起作用(尽管我使用的是V2.0endpoint和版本2库)。

然而,当我直接使用azure门户注册应用程序时,这就解决了问题。我随后能够正确访问该服务。

似乎很奇怪,尽管身份验证/授权服务是我的应用程序的标准配置,并且非常适合访问Sharepoint / One Drive等,但是,当想要访问用户endpoint时,只有在 portal.azure.com 中注册时,它才会起作用。

非常感谢大家的帮助。

白赞
2023-03-14

应用程序在apps.dev.microsoft中注册。com与v2.0endpoint一起使用。请单击此处了解有关v2.0endpoint的更多详细信息。

您可以使用v2.0身份验证协议和Azure Active Directory v2.0身份验证库获取令牌。在身份验证期间,您需要对用户. ReadBasic. All权限进行用户同意或管理员同意。同意后,访问令牌包括该委托权限,并将在调用列表用户操作时工作。

 类似资料:
  • 我想从我的Ruby应用程序中访问Calendar rest API。我已经创建了azure多租户应用程序,并对其进行了配置。 我尝试获取对资源“https://outlook.office365com/”的访问令牌,但出现错误 我找不到这个错误的任何描述,也不明白为什么它被禁用 以下是我的azure应用程序权限:

  • 我倾向于使用图形用户 API 从 Office365 获取所有管理员用户。但管理员用户的用户类型为空。因此,我无法应用过滤器用户类型 eq null。是否有任何选项可以仅获取管理员用户?https://graph.microsoft.com/v1.0/users?$filter=userType eq 空 错误响应:

  • 我使用委托权限来获得访问令牌授权。用户是全局管理员 权限范围是offline_访问用户。读写。所有文件。读写。所有 我请求API获取相同的租户子用户驱动器文件 https://graph.microsoft.com/v1.0/users/xxx/drive/root/children 返回访问拒绝 https://graph.microsoft.com/v1.0/me/drive/root/chi

  • 当我使用graph explorer(https://developer.microsoft.com/en-us/graph/graph-explorer)调用graph API(如teams API)时,它会自动为我提供一个访问令牌,该令牌具有执行任务(如创建团队和添加人员)的权限和身份验证。

  • 我目前正在facebook上测试我的应用程序,试图访问我的账户地址。 在graph explorer中,它表示: 字段为空或被访问令牌禁止。 我检查了所有的访问权限,并在我的个人资料中输入了一个地址。 有什么建议吗? 电子邮件

  • 我有一个新的Office365 Small Business订阅,想知道如何最好地将联系人与自定义的内部数据库应用程序同步。 因此,如果我想通过Azure Active Directory图形客户端库访问Office365帐户中的Azure Active Directory,我应该在哪里注册应用程序,获取密钥--以及连接到哪个主机?