Обновление UPN AzureAD/O365 через график

Я пытаюсь обновить имя участника-пользователя Azure AD (загруженного с помощью Azure AD Connect) в федеративном домене через MS Graph, используя библиотеку .Net ADAL в Powershell. Я достаточно уверен, что у меня все настроено правильно в Azure и в PS, потому что, если я выдам команду на обновление атрибута useLocation, она сработает (обрезано для краткости):

$UPN="[email protected]"
$Body=@{UsageLocation="JP"} | ConvertTo-JSON
$Result=Invoke-RestMethod -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/${UPN}" -Headers @{Authorization=$authenticationResult.CreateAuthorizationHeader()} -ContentType "application/json" -Body $Body
$user=Invoke-RestMethod -Method GET -Uri "https://graph.microsoft.com/v1.0/users/${UPN}?`$select=usageLocation" -Headers @{Authorization=$authenticationResult.CreateAuthorizationHeader()} -ContentType "application/json"
$user.usageLocation

JP

Но если я попытаюсь обновить имя участника-пользователя на нефедеративный домен (чтобы не столкнуться с проблемой, описанной в http://blogs.perficient.com/microsoft/2013/03/change-upn-for-office-365-account-between-two-sso-domains/), я получаю внутреннюю ошибку сервера (500):

$UPN="[email protected]"
$Body=@{userPrincipalName="[email protected]"} | ConvertTo-JSON
$Result=Invoke-RestMethod -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/${UPN}" -Headers @{Authorization=$authenticationResult.CreateAuthorizationHeader()} -ContentType "application/json" -Body $Body

Invoke-RestMethod : The remote server returned an error: (500) Internal Server Error.

Я пробовал много разных вариантов, включая получение GUID Azure AD и использование его вместо имени участника-пользователя в команде PATCH, а также использование более старого графика Azure AD (который возвращает ту же ошибку 500). Я могу внести изменения с помощью команд Powershell O365:

Set-MsolUserPrincipalName -UserPrincipalName $UPN -NewUserPrincipalName $newUPN

но я не могу заставить его работать через MS Graph. Документы для графа подразумевают, что имя участника-пользователя может быть обновлено, как и другие атрибуты (cv http://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_update, например). Мне интересно, может быть, из-за того, что UPN является ключом, обновление не работает? Я также не думаю, что это проблема с разрешениями, обычно они выдают «Недостаточно прав для завершения операции». это не то, что я вижу.

Спасибо!

UPDATE1: вот все, что я могу выудить из объекта Error из повторной попытки сегодня утром:

{
  "error": {
    "code": "Service_InternalServerError",
    "message": "Encountered an internal server error.",
    "innerError": {
      "request-id": "cbb08d3c-1143-4d0b-8722-5230b00bd00f",
      "date": "2016-02-15T16:48:15"
    }
  }
}

person Chris Alexander    schedule 05.02.2016    source источник
comment
Можете ли вы изменить имя участника-пользователя между нефедеративными доменами? Как насчет пользователя, который не синхронизируется локально? (Попытка исключить тот факт, что домен является федеративным и что пользователь управляется локально.)   -  person Philippe Signoret    schedule 06.02.2016
comment
@PhilippeSignoret: я могу успешно изменить имя участника-пользователя для вновь созданного пользователя с нефедеративным доменом через MS Graph. Недавно созданный пользователь был только в облаке и не синхронизировался локально. Я не думаю, что смогу создать локального нефедеративного пользователя UPN с синхронизацией из локальной среды, так как наш AAD Sync Connect синхронизирует только пользователей с федеративными UPN. Я попытался напрямую перейти с одного федеративного домена на другой, но получил ожидаемый Request_BadRequest (а не 500 ошибок внутреннего сервера).   -  person Chris Alexander    schedule 08.02.2016
comment
@ChrisAlexander: Можете ли вы воспроизвести и обновить свой вопрос, добавив дополнительную информацию, пожалуйста? Нам нужен идентификатор запроса клиента и временная метка. Это позволит нам проследить проблему дальше. Я не уверен, возможна ли эта операция, но даже в этом случае она не должна возвращать 500.   -  person Dan Kershaw - MSFT    schedule 12.02.2016
comment
@DanKershaw-MSFT - я обновил исходный запрос текстовым дампом всего объекта ошибки, включая идентификатор запроса и отметку времени. Приносим извинения за небольшую задержку.   -  person Chris Alexander    schedule 15.02.2016


Ответы (1)


Я взглянул на трассировку и зарегистрирую ошибку на нашей стороне для ошибки 500 (здесь мы, безусловно, можем добиться большего). На основании трассировки, если вы обновляете пользователя, переименовывая его из федеративного домена в домен, управляемый облаком, вы ДОЛЖНЫ предоставить/установить пароль как часть запроса (используя сложный тип passwordProfile). Вот почему запрос не выполняется согласно журналам. Пожалуйста, дайте нам знать, если это решит вашу проблему.

person Dan Kershaw - MSFT    schedule 16.02.2016
comment
Это сделало трюк! Мне пришлось немного изменить разрешения моего приложения Azure, чтобы разрешить этому приложению отправлять пароль. Я также могу подтвердить, что вам не нужно вводить пароль при переходе на федеративный домен (поскольку в конечном итоге мое приложение меняет пользователя с одного федеративного домена на другой, но сначала должно временно пройти через домен, управляемый облаком). Редактировать: Спасибо!!! - person Chris Alexander; 18.02.2016
comment
Я просто смог изменить upn пользователя из одного федеративного домена в другой напрямую, используя граф API. Изменилось ли это поведение в последнее время? Я также смог перейти с федеративного домена на управляемый, не вводя новый пароль. - person MarkHasper; 15.05.2019