如何获取登录用户的Azure AD objectid?

问题描述 投票:0回答:5

我正在尝试调用需要当前登录用户的 PrincipalId 的 ARM 模板。

https://learn.microsoft.com/en-us/azure/templates/microsoft.keyvault/vaults

我已经使用 powershell 登录,作为组织 AAD 中的来宾帐户。 当我检查结果上下文时,我得到:

Name             : [[email protected], 5f813400-5b93-43b0-af8f-5fd04714f1ef]
Account          : [email protected]
SubscriptionName : SomeSubscriptionName
TenantId         : e6d2d4cc-b762-486e-8894-4f5f540d5f31
Environment      : AzureCloud

我想知道如何从上面获取 AAD ObjectId,而不用字符串解析“Name”?

请注意,ARM 模板的文档不是很清楚,因此不确定 [email protected] 是否也能正常工作(我假设它在谈论 Guid)。

谢谢。

azure-active-directory azure-resource-manager
5个回答
22
投票

您也可以使用 azure cli 获取它

per @magnusnn 从 2.37.0 版本开始你需要使用

az ad signed-in-user show --query id -o tsv
az ad signed-in-user show --query objectId -o tsv

2
投票

你可以尝试

Get-AzureRmADUser
得到
ObjectId
.

样品:

Get-AzureRmADUser -UserPrincipalName "[email protected]"

结果:

Id
就是
ObjectId
,你可以得到它。另外,您可以通过其他属性获取它,而不仅仅是
-UserPrincipalName
,只需参考命令的链接即可。

更新

如果您使用

Guest
帐户,您可以尝试以下命令。

Get-AzureADUser | ?{$_.UserType -eq "Guest"} | ?{$_.UserPrincipalName -like "*partofyouraccount*"}

注意:在使用该命令之前,您需要安装Azure AD powershell模块.


2
投票

您看到的“姓名”信息与订阅相关。使用下面的命令获取“Account”下的objectId:

(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]

2
投票

我不是 AAD 专家,但我发现我自己的个人 Azure 订阅与我的工作无关,对于以下命令返回 nothing

# does not work sometimes
(Get-AzADUser -UserPrincipalName (Get-AzContext).Account).Id

但是我发现我可以使用 Az CLI 可靠地获取我的用户主体名称 (UPN) 和对象 ID 以获取访问令牌,然后使用 Microsoft Graph API 返回用户信息。

$token = Get-AzAccessToken -Resource "https://graph.microsoft.com/"
$headers = @{ Authorization = "Bearer $($token.Token)" }
Invoke-RestMethod https://graph.microsoft.com/v1.0/me -Headers $headers


1
投票

使用 Powershell cmdlet:

$myObjectId = (Get-AzADUser -UserPrincipalName (Get-AzContext).Account).Id
© www.soinside.com 2019 - 2024. All rights reserved.