gpt4 book ai didi

azure - Get-AzAccessToken 通过定位不同的租户不断返回相同的 token

转载 作者:行者123 更新时间:2023-12-03 06:55:45 25 4
gpt4 key购买 nike

我有一个使用 AAD 保护的 PowerShell Azure Function。在我的脚本中,我使用以下命令获取 id token :

$assertion = $Request.Headers['x-ms-token-aad-id-token']

我使用此断言是为了获取另一个 token 以将 Azure 服务管理 Api 与 OBO 流结合使用。下面是使用的代码:

$contentType = 'application/x-www-form-urlencoded' 
$body = @{
grant_type = $grantType
client_id = $clientId
client_secret = $clientSecret
scope = $scope
requested_token_use = $requestedTokenUse
assertion = $assertion
}

$oboResponse = Invoke-RestMethod 'https://login.microsoftonline.com/e005f490-xxxx-4816-xxxx-b0ed7fa9xxxx/oauth2/v2.0/token' -Method 'POST' -body $body -ContentType $contentType
$accessToken = $oboResponse.access_token

然后,我使用此 token 通过 Connect-AzAccount 命令连接到 azure。到目前为止,一切都很好,与 Azure 的连接工作正常。

在我的脚本中,我尝试使用不同的 token 来连接到我所属的其他租户。不幸的是,它没有按预期工作。事实上,该命令为不同的租户返回相同的 token 。事实上,命令“Get-AzAccessToken -TenantId $tenant.Id”生成的 token 始终等于 OBO 流生成的 token 。

下面是我的 PowerShell Azure 函数。我评论了我遇到问题的部分。

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

$accountId = $Request.Headers['x-ms-client-principal-name']
$grantType = "urn:ietf:params:oauth:grant-type:jwt-bearer"
$clientId = "xxxx"
$clientSecret = "xxxx"
$scope = "https://management.azure.com/user_impersonation"
$requestedTokenUse = "on_behalf_of"
$assertion = $Request.Headers['x-ms-token-aad-id-token']

$contentType = 'application/x-www-form-urlencoded'
$body = @{
grant_type = $grantType
client_id = $clientId
client_secret = $clientSecret
scope = $scope
requested_token_use = $requestedTokenUse
assertion = $assertion
}

$oboResponse = Invoke-RestMethod 'https://login.microsoftonline.com/e005f490-xxxx-4816-xxxx-b0ed7fa9xxxx/oauth2/v2.0/token' -Method 'POST' -body $body -ContentType $contentType
$accessToken = $oboResponse.access_token

Connect-AzAccount -AccessToken $accessToken -AccountId $accountId
$allTenants = Get-AzTenant

foreach ($tenant in $allTenants) {
# Here I get the same access token for different tenants.
# The token is always equal to the token produced by the OBO flow.
$accessToken_ = Get-AzAccessToken -TenantId $tenant.Id
....
....
}
...
...

我不明白为什么 OBO 流生成的 token 始终等于 Get-AzAccessToken 生成的 token 。我希望我正确描述了我的问题,谢谢您的帮助。

谢谢。

最佳答案

我认为问题是由于您使用静态租户 ID/GUID 的 Invoke-RestMethod 调用造成的:

$oboResponse = Invoke-RestMethod 'https://login.microsoftonline.com/e005f490-xxxx-4816-xxxx-b0ed7fa9xxxx/oauth2/v2.0/token' -Method 'POST' -body $body -ContentType $contentType
https://login.microsoftonline.com/{**tenant**}/oauth2/v2.0/token

关于azure - Get-AzAccessToken 通过定位不同的租户不断返回相同的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72981777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com