我的设置:
我已在 Azure Active Directory 中创建了一个多租户应用程序。我已在 “API 权限” 选项卡中为此应用程序注册 Azure DevOps API 添加了两个范围:
user_impersonation
和 vso.profile
。
我已经实现了OAuth2身份验证代码流程:
我使用下一个URL进行授权:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
response_type=code
&client_id=<MY_APP_CLIENT_ID>
&scope=offline_access%20https%3A%2F%2Fapp.vssps.visualstudio.com%2Fuser_impersonation%20https%3A%2F%2Fapp.vssps.visualstudio.com%2Fvso.profile
&redirect_uri=<MY_REDIRECT_URI>
注意,我在查询参数中使用与应用程序中配置的相同范围:
https://app.vssps.visualstudio.com/user_impersonation
https://app.vssps.visualstudio.com/vso.profile
以及在
offline_access
响应中接收 refresh_token
的额外 /token
范围。
我使用下一个 URL 进行代码(到令牌)交换:
https://login.microsoftonline.com/common/oauth2/v2.0/token
将代码交换为令牌后,我收到一对具有下一个范围的访问/刷新令牌:
https://app.vssps.visualstudio.com/vso.code_full
https://app.vssps.visualstudio.com/vso.code_status
https://app.vssps.visualstudio.com/vso.code_write
https://app.vssps.visualstudio.com/vso.profile
https://app.vssps.visualstudio.com/vso.project
问题:
我正在尝试获取Profile API和其他Azure DevOps Repos API,例如存储库列表或提交详细信息。 但我总是收到状态为302的响应和标题为对象已移动的 HTML 页面。
问题:
我在应用程序注册过程中是否遗漏了某些内容,或者是否遗漏了 OAuth2 流程中的某些参数?
当我尝试执行相同的流程,但使用此范围时:
offline_access 499b84ac-1321-427f-aa17-267ca6975798/.default
499b84ac-1321-427f-aa17-267ca6975798
表示资源 id https://app.vssps.visualstudio.com
。
当我使用其他租户的用户凭据时 - 在输入用户电子邮件并点击 Next 按钮后立即收到错误:
This username may be incorrect. Make sure you typed it correctly. Otherwise, contact your admin.
我怎样才能让它与用户一起工作
来自另一个租户?
我是否应该使用旧版 Azure DevOps OAuth 2.0 来访问 Azure DevOps API 而不是 Microsoft Entra ID 应用程序?
对于 Q1 和 Q2:“499b84ac-1321-427f-aa17-267ca6975798”是 Azure DevOps API 资源的唯一范围标识符。令牌的
scope
应为 499b84ac-1321-427f-aa17-267ca6975798/.default
,它提供对 Azure DevOps Services REST API 的访问。这不是一个错误。
对于Q3:根据错误信息,您的帐户和许可证似乎有问题。请检查您是否可以使用此受影响的帐户访问您的 Azure Entra ID。
第四季度:根据他的文档,建议新应用程序开发人员应使用 Microsoft Entra ID OAuth 与 Azure DevOps 集成。