Я пытаюсь добавить пользователя в Active Directory моего клиента Azure.
Я использую Microsoft Graph API
. Тот же самый, выставленный через Graph Explorer здесь.
Проблема в том, что какой бы serviceRoot
URI я не проходил, я получаю исключение.
Я успешно получаю токен методом GetTokenForApplication
:
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async () => await GetTokenForApplication());
Однако, когда я звоню:
await activeDirectoryClient.Users.AddUserAsync(aadUser);
Он выдает это исключение:
"{\r\n
\"error\": {\r\n
\"code\": \"BadRequest\",\r\n
\"message\": \"Query parameter api-version not allowed\",\r\n
\"innerError\": {\r\n
\"request-id\": \"57327a85-8320-4363-b5f9-aeacdf782861\",\r\n
\"date\": \"2019-05-30T21:59:55\"\r\n
}\r\n
}\r\n
}"
Это serviceRoot
URI, который я использую: "https://graph.microsoft.com/v1.0"
Какой URI следует передать в serviceRoot?
Совместим ли ActiveDirectoryClient
с Microsoft Graph
? Я спрашиваю, потому что образец, в котором я видел использование ActiveDirectoryClient
, использовал Azure AD Graph API
.
Этот Сообщение блога показывает разницу между старым Azure AD Graph API
и новым Microsoft Graph API
. Кстати: Microsoft советует нам использовать Microsoft Graph API
, потому что все новые разработки будут сосредоточены на нем.
Я думаю, вы пытаетесь использовать более новый API Microsoft Graph (https://graph.microsoft.com
), но используете клиентскую библиотеку для более старого API Graph Azure AD (https://graph.windows.net
)
Подробно о сравнении можно прочитать здесь - Microsoft Graph или Azure AD Graph
Вот сведения о пакете nuget и классе:
API-интерфейс Microsoft Graph
Microsoft.Graph
пакет nuget — для работы с Microsoft Graph API
и использования GraphServiceClient
класса.API графов Azure AD
Microsoft.Azure.ActiveDirectory.GraphClient
пакет nuget — для работы с Azure AD Graph API и использования класса ActiveDirectoryClient
.Код для клиента API Microsoft Graph
Документы Microsoft — Создание пользователя — пример кода SDK
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AccountEnabled = true,
DisplayName = "displayName-value",
MailNickname = "mailNickname-value",
UserPrincipalName = "[email protected]",
PasswordProfile = new PasswordProfile
{
ForceChangePasswordNextSignIn = true,
Password = "password-value"
}
};
await graphClient.Users
.Request()
.AddAsync(user);
Для B2C по-прежнему следует использовать Azure AD Graph (граф.виндовс.нет). Он предоставляет некоторые пользовательские атрибуты, которых нет в MS Graph.
Я попытался добавить пользователя с учетной записью GMail, и мне не удалось добавить {"Code: Request_BadRequest\r\nMessage: Property userPrincipalName is invalid.\r\n\r\nInner error\r\n"}
... вопрос: для добавления внешних учетных записей \ неорганизационных учетных записей мне нужно будет использовать Azure AD Graph или мне нужен каталог B2C?
Я думаю, что для приглашения внешних пользователей доступен другой API. Посмотрите здесь. .
Graph предназначен для добавления локальных пользователей в b2C, а не федеративных, как Gmail. Вы не можете добавить пользователя Gmail, так как знаете его внутренний идентификатор пользователя Gmail. Скорее позвольте этим пользователям зарегистрироваться и, возможно, использовать функцию REST, чтобы добавить любые дополнительные атрибуты, которые у вас есть о них где-то еще. Azure AD Graph — это просто REST API (альтернатива MS Graph). Его следует использовать для операций пользователей B2C.
Я ужасно извиняюсь: хотя я искал запросы, связанные с B2C. Ваш не связан с B2C, поэтому мои комментарии неуместны. Пожалуйста, игнорируйте. Используйте docs.microsoft.com/en-us/azure/active-directory/b2b/…, чтобы пригласить пользователей Gmail в обычный клиент AAD. Сначала убедитесь, что вы интегрируете свой клиент с Gmail.
Именно это ... Я только что нашел образец проекта после публикации этого вопроса. Проект содержит фрагменты для Microsoft Graph: github.com/microsoftgraph/aspnet-фрагменты-образец... взглянул на код и увидел, что они используют
GraphServiceClient
изMicrosoft.Graph
пакета NuGet. Ты сделал это! Спасибо.