通过图表更新AzureAD/O365 UPN

问题描述:

我试图通过利用Powershell中的.Net ADAL库在联合域中更新联合域中的Azure AD用户的UPN(通过Azure AD Connect加载)。我有理由相信,我所拥有的一切配置中Azure的正确的PS,因为如果我发出了一个命令来更新usageLocation属性,它的工作原理(裁剪为简洁起见):通过图表更新AzureAD/O365 UPN

$UPN="[email protected]" 
[email protected]{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 

但是,如果我尝试更新UPN到非联盟域(所以我不跑触犯在http://blogs.perficient.com/microsoft/2013/03/changing-upn-for-office-365-account-between-two-sso-domains/描述的问题),我回来了内部服务器错误(500):

$UPN="[email protected]" 
[email protected]{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. 

我已经尝试了许多不同的变化,包括检索Azure AD GUID并在PATCH命令中使用该GUID,而不是使用UPN,并使用较早的Azure AD Graph(它将返回相同的500错误)。我可以使用O365 Powershell命令进行更改:

Set-MsolUserPrincipalName -UserPrincipalName $UPN -NewUserPrincipalName $newUPN 

但我似乎无法使其通过MS Graph工作。图形的文档意味着UPN可以像其他属性一样更新(例如,c.v. 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" 
    } 
    } 
} 
+0

您能否在未联合域之间进行UPN更改?对于未在本地同步的用户,如何? (试图排除这个事实,即域是联合的,并且用户是在本地掌握的。) –

+0

@PhilippeSignoret:我可以通过MS Graph成功为新创建的用户创建一个未联合域的UPN更改。新创建的用户只能使用云端,而不是从内部同步。由于我们的AAD Sync Connect仅将用户与联盟UPN同步,因此我认为我无法创建从联合UPN用户同步的非同步用户。我曾尝试直接从一个联邦域更改为另一个,但得到了预期的Request_BadRequest(而不是500内部服务器错误)。 –

+0

@ChrisAlexander:你能重新制作和更新你的问题吗?我们需要客户端请求标识和时间戳。这将使我们能够进一步追踪问题。我不确定这个操作是否可行,但即使如此也不应该返回一个500. –

我接过一看痕迹,而我将文件在我们的侧中的错误500错误(我们当然可以在这里做得更好)。根据跟踪,如果您通过将用户重命名为联合域而将用户更新为云托管域,则必须提供/设置密码作为请求的一部分(使用passwordProfile复杂类型)。这就是为什么根据日志请求失败的原因。请让我们知道这是否解决了您的问题。

+0

这个伎俩!我不得不稍微调整我的Azure应用程序权限,以允许此应用程序提交密码。我还可以确认在更改为联合域时不必提交密码(因为最终我的应用将用户从一个联合域更改为另一个域,但必须先通过云管理域临时通过)。编辑:谢谢! –