azure - 服务帐户能否将更改推送到 Azure Repos?
问题描述
对于内容存储在 JSON 文件中的 CMS 系统,我们希望使用 repo 来跟踪和批准更改。当编辑器进行更改时,我们希望服务器能够提交更改并将更改推送到存储库,然后创建拉取请求。我们希望能够使用服务帐户而不是编辑帐户来执行此操作。
我以为我可以创建一个 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 和 secret 获取令牌并调用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 和机密时,相同的代码会成功,但由于上述原因,该身份无法访问 DevOps。
4) 我已经查看了https://github.com/microsoft/azure-devops-auth-samples上的示例,但其中大多数是交互式的,不符合要求。
解决方案
如果您不想使用编辑的帐户。您可以只创建一个个人访问令牌,然后选择此令牌的完整代码范围。然后您可以使用此 Person 访问令牌向 azure devops 服务器发出 api 请求。您可以在此处查看创建人员访问令牌的详细步骤。
下面是一个调用 azure devops api 的 powershell 脚本示例。这是在 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
您也可以尝试创建一个虚拟用户将其添加到您的组织中,因此您可以使用此虚拟用户帐户执行上述操作。
如果您想使用 OAuth 2.0 授权对 REST API 的访问。您必须按照授权流程使用回调 url 来获取授权码。
client_credentials 授权流程适用于 azure,不适用于 azure devops。
推荐阅读
- python - 如何创建从伪代码到统一成本搜索的算法?
- asp.net - asp.net web api登录和注册没有控制器前缀的路由
- c# - 有没有办法使 DropDownList 中的项目不可选?
- vue.js - 在 Vue.js 组件中将属性传递作为 props 引用
- google-sheets - 如何在 Google 表格中合并具有相同索引和不同值的行?
- javascript - 使用带有承诺的 aych 循环包装函数
- java - ASC 和 DESC 订单的自定义比较器实现
- excel - 需要帮助添加一个循环来计算所有隐藏的工作表或以“S”开头的工作表。
- python - 如何使用 nltk 分隔单个句子?
- c# - 无法解析符号 SaveChangesAsync