【问题标题】:Can a service account push changes to Azure Repos?服务帐户能否将更改推送到 Azure Repos?
【发布时间】:2019-12-20 17:15:34
【问题描述】:

对于内容存储在 JSON 文件中的 CMS 系统,我们希望使用存储库来跟踪和批准更改。当编辑器进行更改时,我们希望服务器能够提交更改并将更改推送到存储库,然后创建拉取请求。我们希望能够使用服务帐户而不是编辑帐户来执行此操作。

我认为我可以创建一个 Azure AAD 应用注册,这样我就可以创建一个 oauth2 不记名令牌以用于我的 api 请求,但我不知道如何授予该帐户对存储库的访问权限。门户有一个 API 权限项,我可以在其中将我的应用程序权限授予 Azure DevOps,但它只是用户模拟/委托权限,为应用程序本身提供权限的选项被禁用。

有可能做我们想做的事吗?

更新:我尝试过的事情

1) 我创建了一个 AAD 应用程序并为该应用程序创建了一个秘密,因此我可以使用 appId 和秘密来获取不记名令牌。然后,我尝试为我的应用程序添加 API 权限到 DevOps,但它只允许我创建委派权限,因为应用程序权限被禁用。我觉得如果我能给这个应用程序提供必要的权限,我的问题就解决了。

2) 我试图在 DevOps 和 Repos 中找到一种方法来允许我的 AAD 应用程序访问,但该应用程序没有出现在我查看过的任何地方。我看到的只是用户和组,我的应用没有出现在这两个列表中。

3) 我在https://app.vsaex.visualstudio.com/app/register 注册了一个应用程序并拥有一个appId 和秘密。我对此持怀疑态度,因为它需要一个回调 url,而我正在尝试使用 client_credentials。当我尝试使用此 appId 和密钥获取令牌并调用 https://app.vssps.visualstudio.com/oauth2/token 时,服务返回 400 错误。我请求不记名令牌的 POST 包括有效负载 client_id={the clientId}&client_secret={the secret}&grant_type=client_credentials 和 application/x-www-form-urlencoded 的内容类型。当我将 url 设置为 https://login.microsoftonline.com 并使用 AAD appId 和 secret 时,相同的代码会成功,但由于上述原因,该身份无法访问 DevOps。

4) 我在https://github.com/microsoft/azure-devops-auth-samples 上查看了示例,但其中大部分是交互式的,不符合要求。

【问题讨论】:

    标签: azure authentication azure-devops azure-repos


    【解决方案1】:

    如果您不想使用编辑的帐户。您可以只创建一个个人访问令牌,然后为该令牌选择 完整代码 范围。然后,您可以使用此 Person 访问令牌向 azure devops 服务器发出 api 请求。您可以查看here创建Person访问令牌的详细步骤。

    以下是调用 azure devops api 的 powershell 脚本示例。 Here 在 C# 中使用 HttpClient 类。

    $url = "https://dev.azure.com/{org}/{proj}/_apis/...."
    
    $connectionToken="Personal Access Token"
    
    $base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
    
    $result = Invoke-RestMethod -Uri $url -Headers @{authorization = ("Basic {0}" -f $base64AuthInfo)} -Method get
    

    您也可以尝试创建一个虚拟用户将其添加到您的组织中,这样您就可以使用这个虚拟用户帐户执行上述操作。

    如果你想Authorize access to REST APIs with OAuth 2.0。您必须按照授权流程使用回调 url 来获取授权码。

    client_credentials authorization flow 用于 azure,不适用于 azure devops。

    【讨论】:

    • 我试图避免使用 PAT,因为我认为它必须与用户帐户相关联。经过一番讨论,我们认为我们应该能够创建一个服务帐户,该帐户可用于生成 PAT。我们现在正在研究这个角度。谢谢。
    • @TimHeikell 关于使用服务帐户将更改推送到 Git 存储库的方法有任何更新吗?我们还在讨论可能的解决方案,以处理与 Azure DevOps 的机器对机器通信,而无需与“真实”用户绑定!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多