Azure - 使用 Azure DevOps 范围生成 oAuth 令牌

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

我正在尝试更新提供给网络应用程序用户的集成,但微软最新的 oauth 流程存在问题。

我已在 Azure 门户中注册了一个应用程序并提供了以下范围

然后,我尝试启动 oAuth 流程并将用户引导至 Microsoft,以允许他们授予对其帐户的访问权限,我尝试使用以下 URL 来执行此操作:

"https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
          client_id=#{app_client_id}
          &response_type=code
          &redirect_uri=#{redirect_url}
          &response_mode=query
          &scope=vso.project vso.work_write User.Read
          &state=#{state}
          &prompt=select_account"

但是,用户总是会返回一条“invalid_scope”消息“输入参数“scope”的提供值无效。范围“vso.project vso.work_write User.Read”不存在”。

如果尝试

scope=CLIENT_ID/.default

返回以下错误:“为输入参数‘scope’提供的值无效。范围‘client-id/.default’无效 - 它引用了客户端所需资源中未列出的资源访问且用户没有任何现有同意。”

(这被设置为网络应用程序中的集成,供任何人使用。)

任何人都可以为我指出正确的方向,即应提供哪些范围值或可能需要在 Azure 门户中进行哪些配置更改?

非常感谢

azure azure-devops azure-active-directory
1个回答
0
投票

我同意@wade Zhou - MSFT,访问Azure DevOps Services REST API的范围必须是

499b84ac-1321-427f-aa17-267ca6975798/.default
,即Azure DevOps的资源应用程序ID。参考这个MsDoc

创建了 Microsoft Entra 应用程序并授予 API 权限:

enter image description here

要解决该错误,请将范围传递为

499b84ac-1321-427f-aa17-267ca6975798/.default
,如下所示:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=499b84ac-1321-427f-aa17-267ca6975798/.default
&state=12345

用户登录成功:

enter image description here

传递上述代码以生成访问令牌以调用DevOps Api:

https://login.microsoftonline.com/common/oauth2/v2.0/token

client_id:ClientID
scope:499b84ac-1321-427f-aa17-267ca6975798/.default
grant_type:authorization_code
code:code
redirect_uri:https://jwt.ms
client_secret:ClientSecret

enter image description here

解码后,范围出现在访问令牌中:

enter image description here

如果问题仍然存在,请授予管理员对 API 权限的同意。

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