无法使用 Python SDK 从 Microsoft Graph 获取所有用户

问题描述 投票:0回答:1

我需要知道用户的电子邮件和 ID(以便我可以从电子邮件中识别用户)。

根据 Microsoft documentation,以下代码应允许检索用户信息。

import asyncio
import configparser

from azure.identity.aio import ClientSecretCredential
from msgraph import GraphServiceClient
from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder

def main():
    # Load settings
    config = configparser.ConfigParser()
    config.read(['config.cfg', 'config.dev.cfg'])
    azure_settings = config['azure']

    credentials = ClientSecretCredential(
        azure_settings['tenantId'],
        azure_settings['clientId'],
        azure_settings['clientSecret'],
    )
    scopes = ['https://graph.microsoft.com/.default']
    client = GraphServiceClient(credentials=credentials, scopes=scopes)
    query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(select=['id', 'mail', ])

    request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(query_parameters=query_params)
    users = asyncio.run(client.users.get(request_config))
    print(users)

但是,我收到错误

Traceback (most recent call last):
  File "C:\Users\PycharmProjects\ProcessEmailReceipts\microsoft_graph.py", line 35, in <module>
    main()
  File "C:\Users\PycharmProjects\ProcessEmailReceipts\microsoft_graph.py", line 28, in main
    request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(query_parameters=query_params)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'UserItemRequestBuilder' has no attribute 'UserItemRequestBuilderGetRequestConfiguration'

查看repo,该类确实不存在。

有没有办法使用 python sdk 获取所有用户 ID 和电子邮件?

谢谢,

python azure microsoft-graph-api
1个回答
0
投票

首先,注册一个 Entra ID 申请并授予

User.Read.All
Application 类型的权限,如下所示:

enter image description here

要使用 MS Graph Python SDK 获取具有 IDEmails 的所有用户,请使用以下示例代码:

import asyncio
from azure.identity import ClientSecretCredential
from msgraph import GraphServiceClient

tenant_id = "tenantID"
client_id = "appID"
client_secret = "secret"

credential = ClientSecretCredential(
    tenant_id=tenant_id,
    client_id=client_id,
    client_secret=client_secret
)

client = GraphServiceClient(credential)

async def main():
    result = await client.users.get()
    users = result.value

    for user in users:
        print("User ID:", user.id)
        print("User Email:", user.mail)
        print("User Display Name:", user.display_name)
        print("-" * 50)  # Separating each user with a line

asyncio.run(main())

回复:

enter image description here

参考:

列出用户 - Microsoft Graph

© www.soinside.com 2019 - 2024. All rights reserved.