Get-MsalToken:在此对象上找不到属性“权限”

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

我正在使用 Powershell Universal (https://docs.powershelluniversal.com/userinterfaces/dashboards) 创建仪表板,我正在尝试获取访问令牌以连接到 MS Graph。我正在使用命令

Get-MsalToken
(MSAL.PS 模块的一部分)来获取访问令牌。我正在运行的代码如下:

$Params = @{
    ClientId = $Credential.UserName
    ClientSecret = $Credential.Password
    TenantId = 'xxxxxxxxxxxxxxxxxxxx'
    ForceRefresh = $true
    ErrorAction = 'Stop'
}
$AccessToken = (Get-MsalToken @Params).AccessToken

使用 Powershell 7 在命令行上运行上述代码时,它工作正常。但是,当仪表板在 Powershell 7 上运行相同的命令时,它会返回此错误消息:

Get-MsalToken: The property 'Authority' cannot be found on this object. Verify that the property exists.

MSAL.PS 模块在我的本地实例和运行仪表板的服务器上的版本都是 4.37.00。在大多数情况下,我无法在我的机器或服务器上复制命令行上的错误,并且该命令运行良好。在连接到其他服务然后运行

Get-MsalToken
后,我能够在我的机器的命令行上本地重现错误,但是第二次尝试正确获取访问令牌,所以我无法准确重现命令中的错误线。然而,仪表板与此错误一致。从服务器运行自动化脚本也不会产生错误。

我确实在 github 上看到一个关于同样问题的论坛,但没有明确的解决方案。我确实看到有人建议从源代码中注释掉一些行,但考虑到他们建议注释掉我用于连接的 TenantID 行,我不赞成这样做。论坛可以在这里找到:https://github.com/AzureAD/MSAL.PS/issues/45

我只是想知道是否有其他人遇到过这个问题或知道解决方案或替代方案。谢谢!

powershell msal
2个回答
0
投票

正如 NiMux 上面所述,解决方案是在导入任何其他内容之前简单地导入

MSAL.PS
模块。在我的代码主页的顶部,我简单地添加了
Import-Module -Name MSAL.PS -Force
,然后它就可以正常工作了。即使模块已经安装和导入,也需要先导入它。

希望这有助于将来解决此问题的其他人。


0
投票

添加 AzureCloudInstance 参数对我有用。这是比先导入模块或更改源代码更可靠的修复方法。

$Params = @{
    ClientId = $Credential.UserName
    ClientSecret = $Credential.Password
    TenantId = 'xxxxxxxxxxxxxxxxxxxx'
    ForceRefresh = $true
    ErrorAction = 'Stop'
    AzureCloudInstance = 1
}

这里是 AzureCloudInstance 参数如何工作的链接。 它在 C# 中,但也可以转换为 PowerShell。我放 1 是因为它是最通用的,但值可能取决于您的组织所在的位置。

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