无法在MS Graph中展开新创建的Open Extension

时间:2019-10-14 10:58:41

标签: azure-active-directory

TLDR版本:这是由于调用Graph之前未对Graph查询字符串进行编码而引起的-不是API问题!

我为特定用户创建了一个新的Open Extension。我可以读取用户,也可以读取特定的Open Extension,但不能使用$ expand在一次调用中将具有Open Extension的用户返回。

我正在使用对AAD的应用程序身份验证(具有秘密),这可能与它无关。我发现的每个示例都使用Graph Explorer中的/v1.0/me快捷方式。

编辑:我很快得到一个没有考虑到这一点的答案。 MS Graph Explorer仅允许通过用户帐户进行身份验证,对我没有帮助

我可以一致地添加,读取和删除扩展名。唯一的问题是在阅读时扩展扩展属性。


$uri = "https://graph.microsoft.com/v1.0/users/user@domain.com.au/extensions"

$body = '{
    "@odata.type":"microsoft.graph.openTypeExtension",
    "extensionName":"au.com.domain.customAttributes",
    "shoesize":"large"
}'

$query = Invoke-RestMethod -Method Post -Uri $uri -ContentType "application/json" -Body $body -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop

#Modify an existing custom attribute
$uri = "https://graph.microsoft.com/v1.0/users/user@domain.com.au/extensions/au.com.domain.customAttributes"

$body = '{
    "shoesize":"small"
}'

$query = Invoke-RestMethod -Method Patch -Uri $uri -ContentType "application/json" -Body $body -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop

## Read user without extension attributes
$uri = "https://graph.microsoft.com/v1.0/users/user@domain.com.au"
$user = Invoke-RestMethod -Method Get -Uri $uri -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop
Write-Host $user

## Read extension attributes only in separate call
$uri = "https://graph.microsoft.com/v1.0/users/user@domain.com.au/extensions/au.com.domain.customAttributes"
$customAttributes = Invoke-RestMethod -Method Get -Uri $uri -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop
Write-Host $customAttributes

## Delete a custom extention
$uri = "https://graph.microsoft.com/v1.0/users/user@domain.com.au/extensions/au.com.domain.customAttributes"
$customAttributes = Invoke-RestMethod -Method DELETE -Uri $uri -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop

Write-Host $customAttributes

我需要能够使用过滤器从55000中吸引100个用户,包括所有他们的开放扩展属性。

编辑:我怀疑这可能是与查询参数相关的问题,我想我会在重写问题之前就此睡觉吗?

例如,这起作用

$uri = "https://graph.microsoft.com/v1.0/users"
$users = Invoke-RestMethod -Method Get -Uri $uri -Headers @{Authorization = "Bearer $token"}  -ContentType "application/json" -ErrorAction Stop 

这使我的租户获得了前100个用户。完全添加任何查询参数都会中断请求。即使出现示例Graph Explorer中的相同Graph调用给出有意义的响应,我也会收到400错误。

我正在Powershell中使用Invoke-RestMethod来调用Graph ...我怀疑我需要尝试一种不同的调用方式或尝试将其他参数传递给Invoke-RestMethod

1 个答案:

答案 0 :(得分:1)

  

但是我不能使用$ expand返回带有Open Extension的用户   一次通话就可以在一起

扩展名显示在扩展名集合中的Microsoft Graph中。因此,您可以使用$ expand在一个调用中将具有Open Extension的用户一起返回。

https://graph.microsoft.com/v1.0/users?$expand=extensions

我为用户创建了相同的扩展名。我可以在回复中找到它。

enter image description here

更新

我尝试使用客户端凭证流,它也有效。这是详细的步骤。

  1. 注册一个应用程序并授予User.ReadWrite.All权限,请记住要授予管理员同意。

enter image description here

2。获取访问令牌

enter image description here

3。使用访问令牌调用api

enter image description here

更新:使用Powershell运行它

enter image description here