使用正确且未过期的密码时提供了无效的客户端密码

Invalid client secret is provided when using correct and not expired secret

我有 Azure App Registration with active secret。

我正在尝试使用 v1.0 获取令牌,如下所示(clientId 是上述应用注册的 ID)

$body = @{
    grant_type = 'client_credentials';
    client_id = $clientId;
    client_secret = $clientSecret;
    resource = $resourceId;
}

$aadResponse = Invoke-WebRequest -Uri "https://login.microsoftonline.com/$aadtenantId/oauth2/token" -Method POST -Body $body -UseBasicParsing

使用 az ad app credential reset --id XXX 重新生成凭据后,一切都按预期工作 - 令牌已正确获取。

但是,在 Azure Devops 中,我在从 KV 获取值时遇到以下错误

然后我将转到 Azure Devops 服务连接,并使用 editverifysave 我能够连接到 KV 而无需任何进一步的更改。

但是,此操作会中断令牌的初始工作获取(如上所述)。

我 100% 确定:

  1. 密码正确
  2. 我真的用的是密码,不是它的id
  3. 编码密码没有帮助
  4. 除了verify服务连接
  5. 没有其他动作
  6. 我正在使用 Failed to obtain the JWT by using the service principal client ID 作为对服务连接的引用

我做错了什么?

我也可以在我这边重现你的问题。

使用 az ad app credential reset --id XXX 重新生成客户端密码后,我想当您在服务连接 Azure Resource Manager using service principal (automatic).

中单击 Verify 时应该会出现如下错误

如服务连接页面所示,您是通过自动方式创建的,如果您重新生成客户端密钥,则需要通过手动方式创建新的服务连接才能解决问题。

您可以在 keyvault 页面和您的 AAD 应用程序页面上获取这些值。对于Service principal key,是你重新生成的client secret,如果你不保存是无法重新获取的,如果是,你需要重新生成一个。

修改值后,验证并保存。

然后在AzureKeyVault@2任务中使用新的服务连接,就可以了。