为什么个人访问令牌(PAT)需要完全访问权限才能提供Azure DevOps REST API?

时间:2020-01-22 17:42:58

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

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

PAT scope setting

在启用每个范围的情况下,将PAT设置为自定义访问时,某些请求将失败:

Invoke-RestMethod:远程服务器返回错误:(401)未经授权。

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

编辑:有关的REST API请求:

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

2 个答案:

答案 0 :(得分:0)

对于此问题,我测试了您列出的api。我尝试仅在 Build 范围内选择 Read 访问权限,PAT正常运行。

enter image description here

enter image description here

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

在某些特殊的api中,我们只能使用Full access,因为并非所有作用域都将在Custom defined access中列出。 Custom defined access中未定义某些特殊情况api的范围。例如,从浏览器的网络中跟踪api,但未在官方文档中进行记录。您可以参考此case

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

答案 1 :(得分:0)

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

我必须单击底部的按钮:

Show all scopes in PAT settings

当我启用所有范围的身份验证时,它列出了所有范围。然后,我一次禁用5,然后重新测试,发现我需要的只是令牌管理[读取和管理]。

Token Administration Scope Image