Oauth 从发布管道登录Azure Devops CLI的最佳方式是什么?

Oauth 从发布管道登录Azure Devops CLI的最佳方式是什么?,oauth,azure-devops,command-line-interface,Oauth,Azure Devops,Command Line Interface,我正在我的一个管道上使用Azure Devops CLI。为了使用CLI,我需要首先登录(验证)。与使用RESTAPI不同,我不能使用可用的OAuth令牌 以下是我对我的选择的理解: 我可以使用映射到此环境变量的PAT进行“az登录”: AZURE_DEVOPS_EXT_PAT 我现在就是这样做的。 显然,您可以使用服务主体。我最喜欢这个,因为理论上我应该能够让这个原则适用于我团队中的每个人。对吗 使用带有用户/密码的“az登录”。这是最不可取的方法,因为它涉及到传递凭证。太乱了 尽管我的管道具

我正在我的一个管道上使用Azure Devops CLI。为了使用CLI,我需要首先登录(验证)。与使用RESTAPI不同,我不能使用可用的OAuth令牌

以下是我对我的选择的理解:

  • 我可以使用映射到此环境变量的PAT进行“az登录”:
  • AZURE_DEVOPS_EXT_PAT

    我现在就是这样做的。

  • 显然,您可以使用服务主体。我最喜欢这个,因为理论上我应该能够让这个原则适用于我团队中的每个人。对吗

  • 使用带有用户/密码的“az登录”。这是最不可取的方法,因为它涉及到传递凭证。太乱了

  • 尽管我的管道具有OAuth令牌expost(System.AccessToken),但CLI无法使用它。例如,我尝试将OAuth令牌的值分配给失败的AZURE_DEVOPS_EXT_PAT(AZURE_DEVOPS_EXT_PAT=$System.AccessToken)

  • 问题:

  • 是否可以使用OAuth令牌登录到CLI

  • 服务负责人是最好的方式吗

  • 其他信息:


    我没有订阅,只有一个租户id,我们没有创建任何Azure资源,我们是一个AWS商店,恰好只对CICD使用ADO。

    使用
    az devops登录
    而不是
    az登录

    从您的管道使用:

    - script: echo $(AccessToken) | az devops login
      env:
        AccessToken: $(System.AccessToken)
    
    几个有趣的注释:

    • 机密(如System.AccessToken)可用于脚本,除非您将其作为环境变量显式传递
    • System.AccessToken变量是生成代理的默认访问令牌
    • 有一个特定于项目的生成代理和一个项目集合生成代理。实际上,您使用的是由项目管道设置中的“限制对当前项目范围的访问”标志控制的
    • 如果试图操作对象,可能需要提升生成代理的权限。例如,如果希望生成代理更新存储库,可以授予存储库的“创建标记”权限
    • 您还可以使用指定的权限创建自己的PAT令牌

    您是否可以创建服务连接并在Azure CLI任务中使用它?我发现你有两种可能:使用通用服务连接或azure classic连接。我确实设置了服务连接,但任务仍然要求我使用“az登录”登录。您对此有经验吗?Azure CLI任务正在执行“az.cmd”登录--服务主体-u***-p***--租户***”。您应该在AD中创建一个具有适当权限的特殊生成用户。如果这没有帮助,您可以发布Azure CLI任务的输出吗?