Azure devops Microsoft.IdentityModel.Clients.ActiveDirectory未加载到Azure DevOps PowerShell发布管道上
最近,我在尝试创建ClientCredential和/或ClientAssertion时遇到Azure DevOps PowerShell的一些问题。我有以下代码,它在过去基于以下变量创建ClientCredential:Azure devops Microsoft.IdentityModel.Clients.ActiveDirectory未加载到Azure DevOps PowerShell发布管道上,azure-devops,azure-powershell,Azure Devops,Azure Powershell,最近,我在尝试创建ClientCredential和/或ClientAssertion时遇到Azure DevOps PowerShell的一些问题。我有以下代码,它在过去基于以下变量创建ClientCredential: 租户 客户ID(SPN) 密码(SPN密码) $ResourceUrl=”https://database.windows.net/" $AuthorityUrl=”https://login.microsoftonline.com/$($TENATID) $objCli
是否有人遇到过类似问题?您知道我应该如何驱动此问题吗?如果您在本地计算机上运行脚本。您可以检查程序集的安装位置并手动导入.dll文件。我在本地计算机上进行了测试。仅导入azureAd模块时效果良好:
Install-Module AzureAD -Force
Import-Module -Name AzureAD
如果您在azure管道中运行脚本。当您在azure powershell任务中使用安装模块-Name AzureAD-Force
安装AzureAD
模块时。您可以从生成日志中看到,AzureAD模块安装在文件夹C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.2.128
:
从日志中,我们可以看到assemblyMicrosoft.IdentityModel.Clients.ActiveDirectory.dll
不会自动加载
因此,您可以从模块Azure AD安装文件夹手动加载它:请参阅以下内容:
Install-Module AzureAD -Force
Import-Module -Name AzureAD
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.2.128\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$TenantId= "..."
$ClientID ="..."
$Password = "..."
$ResourceUrl = "https://database.windows.net/"
$AuthorityUrl = "https://login.microsoftonline.com/$($TenantId)"
...
$objAuthenticationResult = $objAuthenticationContext.AcquireTokenAsync($ResourceUrl, $objClientCredential).Result
见下面的结果
如果您在本地计算机上运行脚本。您可以检查程序集的安装位置并手动导入.dll文件。我在本地计算机上进行了测试。仅导入azureAd模块时效果良好:
Install-Module AzureAD -Force
Import-Module -Name AzureAD
如果您在azure管道中运行脚本。当您在azure powershell任务中使用安装模块-Name AzureAD-Force
安装AzureAD
模块时。您可以从生成日志中看到,AzureAD模块安装在文件夹C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.2.128
:
从日志中,我们可以看到assemblyMicrosoft.IdentityModel.Clients.ActiveDirectory.dll
不会自动加载
因此,您可以从模块Azure AD安装文件夹手动加载它:请参阅以下内容:
Install-Module AzureAD -Force
Import-Module -Name AzureAD
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.2.128\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$TenantId= "..."
$ClientID ="..."
$Password = "..."
$ResourceUrl = "https://database.windows.net/"
$AuthorityUrl = "https://login.microsoftonline.com/$($TenantId)"
...
$objAuthenticationResult = $objAuthenticationContext.AcquireTokenAsync($ResourceUrl, $objClientCredential).Result
见下面的结果
您好,我尝试了您的解决方案安装模块AzureAD-Force,导入模块AzureAD Add Type xxxxxx,但得到的结果与从计算机使用dll时的结果相同。该代码在创建ClientCredential时不会引发异常,但会返回null@delucaezequiel我检查了您的代码,发现您使用了异步方法
AcquireTokenAsync
。Async方法没有立即返回结果。您需要通过撤消result属性来获取结果。$objAuthenticationResult=$objAuthenticationContext.AcquireTokenAsync($ResourceUrl,$ObjClient Redential).Result
。请参见上面的更新AcquireTokenAsync无法正确执行,因为客户端凭据为空。在$objAuthenticationContext.AcquireTokenAsync($ResourceUrl,$objClientCredential)之后我返回带有$objAuthenticationContext.Result.AccessToken的访问令牌,但正如我所说的,由于null@delucaezequiel您是否检查了$ClientId$密码是否已成功传递给new()
Method?是的,我找到了。它们带有所需的值。我在执行之前在控制台中打印它们,并复制到一个纯文本文件中,以检查是否错误添加了空格。您好,我尝试了您的解决方案安装模块AzureAD-Force,导入模块AzureAD Add Type xxxxxx,但我得到的结果与使用machi中的dll时相同代码不会在ClientCredential创建时引发异常,但会返回null@delucaezequiel我检查了您的代码,发现您使用了async方法AcquireTokenAsync
。async方法没有立即返回结果。您需要通过撤销result属性来获得结果。$objAuthenticationResult=$objauthnticationContext.AcquireTokenAsync($ResourceUrl,$objClientCredential)。结果
。请参阅上面的更新由于客户端凭据为空,AcquireTokenAsync无法正确执行。在$objAuthenticationContext.AcquireTokenAsync($ResourceUrl,$objClientCredential)之后我返回带有$objAuthenticationContext.Result.AccessToken的访问令牌,但正如我所说的,由于null@delucaezequiel您是否检查了$ClientId$密码是否成功