Как получить идентификатор пользователя с адреса электронной почты в Microsoft Graph API C#

Я хочу добавить пользователя в группу, но у меня нет id пользователя, у меня есть только адрес электронной почты.

Вот код:

User userToAdd = await graphClient
    .Users["objectID"]
    .Request()
    .GetAsync();

await graphClient
    .Groups["groupObjectID"]
    .Members
    .References
    .Request()
    .AddAsync(userToAdd);

Может ли кто-нибудь помочь, как получить ObjectId (идентификатор пользователя) с адреса электронной почты с помощью Microsoft Graph?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
14 890
4

Ответы 4

Вы можете получить данные пользователя из Graph API, используя id или userPrincipalName (который является адресом электронной почты).

От Справочник по Microsoft Graph API:

GET /users/{id | userPrincipalName}

Вы пробовали использовать адрес электронной почты как objectID?

Спасибо, это работает!

Bishal Paudel 18.01.2021 22:27

Вы можете найти пользователя несколькими способами.

Из конечной точки /users вы можете использовать их id (GUID, назначенный каждой учетной записи) или их userPrincipalName (их псевдоним электронной почты для домена по умолчанию):

// Retrieve a user by id
var user  = await graphClient
    .Users["00000000-0000-0000-0000-000000000000"]
    .Request()
    .GetAsync();

// Retrieve a user by userPrincipalName
var user  = await graphClient
    .Users["[email protected]"]
    .Request()
    .GetAsync();

Если вы используете либо гранты OAuth Код авторизации или неявный, вы также можете найти пользователя, который прошел аутентификацию через конечную точку /me:

var user = await graphClient
    .Me
    .Request()
    .GetAsync();

Есть ли способ фильтрации по имени участника-пользователя?

Tassisto 15.06.2021 18:38

Имя участника-пользователя уникально для клиента, поэтому фильтрация по UPN приведет к созданию коллекции с одним элементом. Этот предмет будет таким же, как .Users["[email protected]"].

Marc LaFleur 15.06.2021 21:44

Помимо этих правильных ответов выше.

userPrincipalName или id не являются внешним адресом электронной почты. Это был мой случай, когда регистрация производилась вручную. Вы можете использовать этот фильтр:

var user = await _graphClient.Users
    .Request()
    .Filter($"identities/any(c:c/issuerAssignedId eq '{email}' and c/issuer eq 'contoso.onmicrosoft.com')")
    .GetAsync();

src: https://docs.microsoft.com/de-de/graph/api/user-list?view=graph-rest-1.0&tabs=csharp

Используя эту конфигурацию для создания пользователя:

Microsoft.Graph.User graphUser = new Microsoft.Graph.User
{
    AccountEnabled = true,
    PasswordPolicies = "DisablePasswordExpiration,DisableStrongPassword",
    PasswordProfile = new PasswordProfile
    {
            ForceChangePasswordNextSignIn = false,
            Password = accountModel.Password,
        },
        Identities = new List<ObjectIdentity>
        {
            new ObjectIdentity()
            {
                SignInType = "emailAddress",
                Issuer  = "contoso.onmicrosoft.com",
                IssuerAssignedId = email
            }
        },
};

Если вам нужно получить гость, можно использовать:

public static async Task<User> GetGuestUserByEmail(string email)
{
        try
        {
            var request = await graphClient
                .Users
                .Request()
                .Filter($"userType eq 'guest' and mail eq '{email}'") // apply filter
                .GetAsync();

            var guestUsers = request.CurrentPage.ToList();
            var user = guestUsers.FirstOrDefault();
            return user;
        }
        catch (ServiceException ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
            return null;
        }
 }

Другие вопросы по теме