【问题标题】:Why does a Personal Access Token (PAT) need full access to serve the Azure DevOps REST API?为什么个人访问令牌 (PAT) 需要完全访问权限才能为 Azure DevOps REST API 提供服务?
【发布时间】:2020-05-08 22:49:17
【问题描述】:

通过 PowerShell 通过 REST API 访问 Azure DevOps 时,用于身份验证的个人访问令牌 (PAT) 需要完全访问权限

当 PAT 设置为 自定义 访问并启用每个范围时,一些请求会失败:

Invoke-RestMethod : 远程服务器返回错误:(401) Unauthorized.

为什么 完全访问权限 不等于 自定义 访问权限并启用每个范围和最大权限?是否不能将 PAT 限制在请求实际涉及的范围内?

编辑:相关的 REST API 请求:

GET https://dev.azure.com/{organization}/{project}/_apis/build/latest/{definition}?api-version=5.1-preview.1

【问题讨论】:

  • 可能有助于提供您发送的 API 请求
  • 我也有同样的问题。即使启用了所有权限,我也无法使用特定端点。如果我选择完全访问权限,它会起作用。就我而言,端点:“dev.azure.com{org}/{projectguid}/_api/_identity/AddTeamAdmins?api-version=5.1-preview.1”我发了一个帖子来向项目团队添加管理员。你知道为什么会这样吗?
  • 顺便说一句,直到大约一周前,这才使用自定义范围。现在它需要完全访问权限。有什么想法吗?
  • 我从来没有弄清楚这种奇怪行为的原因。我开始尽可能使用默认凭据来验证 REST 请求,以避免处理 PAT。

标签: powershell azure-devops azure-devops-rest-api azure-devops-server-2019


【解决方案1】:

对于这个问题,我测试了你列出的 api。我尝试在 Build 范围内仅选择 Read 访问权限,PAT 工作正常。

我还尝试在启用每个范围的情况下设置自定义访问权限,显然这也可以正常工作。

在一些特殊的api中,我们只能使用Full access,因为不是所有的作用域都会在Custom defined access中列出。 Custom defined access 中没有定义一些特殊情况 api 的范围。例如,该 api 是从浏览器的网络中跟踪的,并且没有记录在官方文档中。可以参考这个case

你使用的api记录在documentation中,你可以尝试在Postman中测试看看是否有相同的结果。

【讨论】:

  • 我又试了一次。在 PAT 的构建范围内启用读取访问权限对我和这个特定请求不起作用。对于其他请求,它可以工作。例如,我可以获得构建定义。 (docs.microsoft.com/en-us/rest/api/azure/devops/build/…)
  • 您可以尝试撤销之前的 PAT 并重新创建一个新的。
【解决方案2】:

我尝试使用 curl 下载文件,这需要 PAT。在 GitHub 中,它无需 PAT 即可工作。 当我在 Azure DevOps 设置中将个人访问令牌设置为完全访问时,它工作正常。所以我设置了自定义,然后启用了所有自定义的访问范围。

我必须点击底部的按钮:

当我启用所有验证工作时,这列出了所有范围。然后我一次禁用 5 个并重新测试,发现我需要的只是 Token Administration [Read & Manage]。

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2020-08-31
    • 2020-06-17
    • 2020-04-23
    • 2021-03-21
    相关资源
    最近更新 更多