我使用 Windows pwsh 脚本接收 AccessToken。该代码在我自己的 PC 和云中的虚拟 Windows 服务器上运行正常。我们希望在 ubuntu 虚拟机上运行此代码
我使用 Windows pwsh 脚本接收 AccessToken。该代码在我自己的 PC 和云中的虚拟 Windows 服务器上运行正常。
我们希望在 ubuntu 虚拟机上运行此代码,因为其他步骤都已准备好集成在此 ubuntu 机器中,并且在 windows 服务器上运行它们会出现一些兼容性问题。
这是现在的代码:
# Get JWT using certificate
# PowerShell 7 required
# Required modules
# Install-Module -name MSAL.PS -Force -AcceptLicense
# Install-Module -Name JWTDetails
Import-Module MSAL.PS
$clientID = 'xxx'
$tenantID = 'yyy'
$ClientCertificateLocation = 'Cert:\LocalMachine\My\zzz'
$ClientCertificate = Get-Item $ClientCertificateLocation
$tokenScope = 'api://aaa/.default'
$myAccessToken = Get-MsalToken -ClientId $clientID -TenantId $tenantID -ClientCertificate $ClientCertificate -Scope $tokenScope
# Inspect and print the Access Token using JWTDetails PowerShell Module
#$myAccessToken.AccessToken | Get-JWTDetails
$myAccessToken.AccessToken | Set-Clipboard;
$myAccessToken.AccessToken | Write-output;
我认为主要问题是 Windows 和 Ubuntu 之间证书保存和使用方式的差异。我尝试了多种不同格式证书的代码变体,但尚未找到正确的解决方案。
ubuntu 代码给我的主要警告是,他们找不到密钥,而密钥在证书中或者是单独给出的。
有什么想法吗?我也愿意使用 Python 或其他东西迁移到 ubuntu。使用 Python 测试,但出现相同类型的错误。我确实为 ubuntu 安装了 pwsh 包。
这是在 ubuntu pwsh 上尝试的代码之一:
# Required modules
# Install-Module -name MSAL.PS -Force -AcceptLicense
# Install-Module -Name JWTDetails
Import-Module MSAL.PS
$clientID = 'xxx'
$tenantID = 'yyy'
$CertificateLocation = '/home/ubuntu/zzz_be.crt'
$PrivateKeyLocation = '/home/ubuntu/private.key'
$tokenScope = 'api://zzz/.default'
# Load certificate and private key
$Certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$Certificate.Import($CertificateLocation)
$PrivateKey = Get-Content $PrivateKeyLocation -Raw
# Acquire token
$myAccessToken = Get-MsalToken -ClientId $clientID -TenantId $tenantID -ClientCertificate $Certificate -PrivateKey $PrivateKey -Scope $tokenScope
# Check if the token is obtained successfully
if ($myAccessToken.AccessToken -ne $null) {
# Inspect and print the Access Token using JWTDetails PowerShell Module
$myAccessToken.AccessToken | Get-JWTDetails
} else {
Write-Host "Failed to obtain the access token."
}