我正在尝试获取 Azure DevOps 的 OAuth 访问权限来访问我的工作项。 我想我已经完成了大部分的准备,我在 Entra Id 中注册了一个应用程序,并且我已经设置了这样的 API 权限
从我的应用程序中,我被重定向到 Microsoft 登录页面。 url 的范围部分看起来像
scope=https%3A%2F%2Fapp.vssps.visualstudio.com%2F.work
(scope=https://app.vssps.visualstudio.com/.work
,没有 url 格式)。
我登录并被重定向回我的回调网址,但在 URLParams 中我得到了这个
error=invalid_scope&error_description=The%20provided%20value%20for%20the%20input%20parameter%20%27scope%27%20is%20not%20valid.%20The%20scope%20%27https://app.vssps.visualstudio.com/.work%27%20does%20not%20exist.
错误:
invalid_scope
错误描述:
The provided value for the input parameter 'scope' is not valid.
The scope 'https://app.vssps.visualstudio.com/.work' does not exist.
我不确定为什么会出现此错误,我无法真正找到有关应存在哪些范围的信息,并且我找到的所有内容都指向
https://app.vssps.visualstudio.com/.work
是正确的。
如何解决?
我已经为 Azure Devops 尝试了多种不同的作用域,我尝试以多种方式格式化作用域,并且某处引用了 GUID 格式化作用域
499b84ac-1321-427f-aa17-267ca6975798/.default
,但除了提到的错误消息之外,没有给我任何其他信息。
我也尝试过使用和不使用 URI 编码。
根据描述,您正在使用
Azure Entra Id OAuth2
并创建了应用程序注册。
由于您需要通过应用程序注册来访问 DevOps 工作项,因此您可以:
vso.profile
和 vso.work
,因为下面的项目权限已授予权限。您可以按照文档OAuth 2.0客户端凭据授予,访问
https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token
来授予访问令牌。对于 Azure DevOps,范围值应为 499b84ac-1321-427f-aa17-267ca6975798/.default
。
在下面的rest api脚本中实现:
#replace with your value
$tenantId="tenantid"
$App_ID="clientid"
$App_Secret="secretid"
$tokenResponse = Invoke-RestMethod -Method Post -Uri https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token -Body @{
client_id = $App_ID
scope = "499b84ac-1321-427f-aa17-267ca6975798/.default" # Azure DevOps resource ID
client_secret = $App_Secret
grant_type = "client_credentials"
}
$auth = "Bearer " + $tokenResponse.access_token
# Get the work item detail
$workItems = Invoke-RestMethod -H @{ 'Authorization' = $auth } "https://dev.azure.com/orgname/projectname/_apis/wit/workitems/65?api-version=6.0"
echo $workItems | ConvertTo-Json