powershell - 使用 New-AzServiceBusAuthorizationRuleSASToken 为 azure 服务总线队列/主题生成 SAS 令牌

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

我有下面的代码来分别获取服务总线和队列的授权ID

$auth_Ids = (Get-AzServiceBusAuthorizationRule -ResourceGroupName $ResourceGroupName -NamespaceName $NamespaceName).Id
$auth_Id = ($auth_Ids[1] | Out-String)

运行上述命令为我提供服务总线 SAS 策略授权 ID

/subscriptions/XXX/resourcegroups/YYY/providers/Microsoft.ServiceBus/namespaces/YYY-asb/authorizationrules/SASPolicy

现在获取队列身份验证ID

$qauth_Id = (Get-AzServiceBusAuthorizationRule -ResourceGroupName $ResourceGroupName -NamespaceName $NamespaceName -QueueName $QueueName).Id

运行上述命令为我提供了 QUEUE SAS 策略授权 ID

/subscriptions/XXX/resourcegroups/YYY/providers/Microsoft.ServiceBus/namespaces/YYY-asb/queues/qname/authorizationrules/Policy

auth_ids 之间的唯一区别是

queues/qname/

现在,当我调用

New-AzServiceBusAuthorizationRuleSASToken
生成 SAS 令牌时,使用队列 auth_id 的调用可以正常工作。

这有效(队列中的 qauth_id)

$sastoken = (New-AzServiceBusAuthorizationRuleSASToken -AuthorizationRuleId $qauth_Id -KeyType $PolicyName -ExpiryTime $endtime).SharedAccessSignature 

这不是(来自服务总线的 auth_id)

$sastoken = (New-AzServiceBusAuthorizationRuleSASToken -AuthorizationRuleId $auth_Id -KeyType $PolicyName -ExpiryTime $endtime).SharedAccessSignature

解析值时遇到意外字符:<. Path '', line | 0, position 0.

我不确定如何将 SAS 令牌获取到服务总线本身而不是队列/主题。 我是否必须在每个队列或主题上创建 SAS 策略才能获取 SAS 令牌,或者服务总线级别的 SAS 策略就足够了?

powershell azureservicebus sas-token
1个回答
0
投票

解析值时遇到意外字符:<. Path '', line | 0, position 0.

错误可能是您在

AuthorizationruleId
命令中传递了
New-AzServiceBusAuthorizationRuleSASToken
格式不正确。

首先,我使用以下命令尝试了 AuthorizationruleId:

$auth_Ids = (Get-AzServiceBusAuthorizationRule -ResourceGroupName xxxx -NamespaceName xxxxx.Id
$auth_Id = ($auth_Ids[1])
$auth_Id

输出:

 /subscriptions/xxxxxx/resourcegroups/xxxxxx/providers/Microsoft.ServiceBus/namespaces/sxxxxxx/authorizationrules/saspolicy

现在我尝试使用以下命令使用上面的

SAS
创建一个
auth_Id

令牌

命令:

$StartTime = Get-Date
$EndTime = $StartTime.AddHours(2.0)
$sastoken = (New-AzServiceBusAuthorizationRuleSASToken -AuthorizationRuleId $auth_Id -KeyType saspolicy -ExpiryTime $EndTime).SharedAccessSignature
$sastoken

输出:

 sr=xxxxx.servicebus.windows.net%2f&sig=%2fl5%2f0Xl9ZAgQ1X1tm98Pb47rqFSP0wJ%2fWBlLrxh9ubA%3d&se=1698853532&skn=saspolicy

总产量:

PS /home/xxxx> $auth_Ids = (Get-AzServiceBusAuthorizationRule -ResourceGroupName xxxx -NamespaceName xxxx).Id
PS /home/xxxx> $auth_Id = ($auth_Ids[1])             
PS /home/xxxx> $auth_Id
/subscriptions/xxxx/resourcegroups/xxxxx/providers/Microsoft.ServiceBus/namespaces/xxxxx/authorizationrules/saspolicy
PS /home/xxxx> $StartTime = Get-Date
PS /home/xxxx> $EndTime = $StartTime.AddHours(2.0)
PS /home/xxxx> $sastoken = (New-AzServiceBusAuthorizationRuleSASToken -AuthorizationRuleId $auth_Id -KeyType saspolicy -ExpiryTime $EndTime).SharedAccessSignature
PS /home/xxxx> $sastoken
 sr=sxxxxx.servicebus.windows.net%2f&sig=%2fl5%2f0xxxxxxxx7rqFSP0wJ%2fWBlLrxh9ubA%3d&se=1698853532&skn=saspolicy
PS /home/xxxx> 
 

enter image description here

上述命令在命名空间级别执行并创建

SAS
令牌。

参考:

新-AzServiceBusAuthorizationRuleSASToken (Az.ServiceBus) |微软学习

© www.soinside.com 2019 - 2024. All rights reserved.