Я хочу добавить пользователя в группу, но у меня нет id
пользователя, у меня есть только адрес электронной почты.
Вот код:
User userToAdd = await graphClient
.Users["objectID"]
.Request()
.GetAsync();
await graphClient
.Groups["groupObjectID"]
.Members
.References
.Request()
.AddAsync(userToAdd);
Может ли кто-нибудь помочь, как получить ObjectId (идентификатор пользователя) с адреса электронной почты с помощью Microsoft Graph?
Вы можете получить данные пользователя из Graph API, используя id
или userPrincipalName
(который является адресом электронной почты).
От Справочник по Microsoft Graph API:
GET /users/{id | userPrincipalName}
Вы пробовали использовать адрес электронной почты как objectID
?
Вы можете найти пользователя несколькими способами.
Из конечной точки /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();
Есть ли способ фильтрации по имени участника-пользователя?
Имя участника-пользователя уникально для клиента, поэтому фильтрация по UPN приведет к созданию коллекции с одним элементом. Этот предмет будет таким же, как .Users["[email protected]"]
.
Помимо этих правильных ответов выше.
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;
}
}
Спасибо, это работает!