ADAL v5.2.9 PowerShell调用AcquireTokenAsync提示方法不存在求助
问题修复方案
1. 变量名拼写错误修正
代码中定义的认证上下文变量为$authenticationContext,但报错行调用时使用了未定义的$authContext,变量名不匹配是报错的直接原因,先统一变量名。
2. ADAL v5版本接口适配
ADAL v5.2.9对异步方法重载做了调整,原AcquireTokenAsync针对客户端证书凭证的重载已拆分,替换为专用的AcquireTokenForClientAsync方法即可,同时增加异步等待逻辑避免偶发空值。
3. 修正后完整代码
function Get-AccessToken { $tenantID = "<id>" $AuthUri = "https://login.microsoftonline.com/$tenantID" # SPN配置 $AppId = "" # 证书配置 $clientCertificate = Get-Item -Path Cert:\CurrentUser\My\<cert thumb> $resource = "<RestApi>" $adal = "<path to the dll>\Microsoft.IdentityModel.Clients.ActiveDirectory.dll" [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null $authenticationContext = New-Object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext -ArgumentList $AuthUri $certificateCredential = New-Object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate -ArgumentList ($AppId, $clientCertificate) # 替换适配v5版本的方法,添加异步等待 $authToken = $authenticationContext.AcquireTokenForClientAsync($resource, $certificateCredential) $authToken.Wait() $accessToken = $authToken.Result.AccessToken.Trim() $accessToken | Clip Write-Host "Token length" Write-Host $accessToken.Length $accessToken } # 获取访问令牌 $token = Get-AccessToken
可选兼容方案
如果要保留原AcquireTokenAsync写法,补充第三个参数$null适配v5版本的重载要求即可:
$authToken = $authenticationContext.AcquireTokenAsync($resource, $certificateCredential, $null)
内容的提问来源于stack exchange,提问作者munna
相关产品推荐
相关产品推荐

