Azure Entra Id OAuth2 似乎无法克服无效范围错误。我应该如何发送范围?

问题描述 投票:0回答:1

我正在尝试获取 Azure DevOps 的 OAuth 访问权限来访问我的工作项。 我想我已经完成了大部分的准备,我在 Entra Id 中注册了一个应用程序,并且我已经设置了这样的 API 权限

Azure portal API permissions, showing permissions for vso.profile and vso.work

从我的应用程序中,我被重定向到 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 编码。

oauth-2.0 azure-devops-rest-api microsoft-entra-id scopes
1个回答
0
投票

根据描述,您正在使用

Azure Entra Id OAuth2
并创建了应用程序注册。

由于您需要通过应用程序注册来访问 DevOps 工作项,因此您可以:

  1. 授予 API 权限如下,并授予管理员同意权限。您可以删除
    vso.profile
    vso.work
    ,因为下面的项目权限已授予权限。

enter image description here

  1. 转到DevOps,将服务主体添加到具有必要权限的适当组,例如:目标项目的
    contributor
    角色。 enter image description here

您可以按照文档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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.